msksgm’s blog

msksgm’s blog

Webエンジニアです.日々の勉強,読書,映画観賞,美術観賞の記録を載せます.勉強日記と読書日記は定期的に削除します.

Webアプリ・プログラミング学習メモ(継続 218日目)

今日は金曜日に公開する記事を作成していました。

今日取り組んだこと

  • 記事の作成

今後取り組むこと

  • Web アプリ開発
    • フッターを作成
    • デザインカンプを作成
    • API を作成
    • テストコードを記述

「Node.js デザインパターン 第2版」 読書 継続220日目

「Node.js デザインパターン 第 2 版」[Mario Casciaro (著), Luciano Mammino (著), 武舎 広幸 (翻訳), 阿部 和也 (翻訳)]を読んでいます。

6章 デザインパターン

ストラテジー

「コンテキスト(context)」と呼ばれるオブジェクトに対し、その可変部分のロジックを抜き出した「ストラテジー(strategy)」と呼ばれる交換可能なオブジェクトを複数提供することで、ロジックの変更をサポートするパターン。

コンテキストに対してが一連のアルゴリズムに共通したロジックを実装するのに対し、ストラテジーは変更可能な部分を実装し、入力値、システム構成、ユーザー設定といった要因の変化に応じて、コンテキストが振る舞いを変えられるようにする。

ステート

ストラテジーパターンの変種、コンテキストの状態に従って変化するストラテジーとしてみることができる。
ステートパターンは、ストラテジーが動的に変わる(ストラテジーパターンは消滅するまで変わらない)。

テンプレート

テンプレートは、アルゴリズムの骨格となる抽象擬似クラスを定義する。
ステップの一部は未定義のまま。
サブクラスは「テンプレートメソッド」と呼ばれる欠けたステップを実装することで、アルゴリズムの欠損部を埋める。

ミドルウェア

Node でもっとも特徴的なパターン。
一般的な意味合いと異異なる。

Express は最小限の機能しかない軽量なライブライのため、ミドルウェアでは多くの機能(リクエストのボディの解析、セッションの管理など)を担当する。

  • use()を呼び出すことで登録される
  • 処理が必要なデータを新しく受け付けた場合、登録されているミドルウェアは非同期の逐次実行の流れとして起動される
  • ミドルウェアの各関数が、コールバックを起動しないか、コールバックをエラーに渡すことで、その先のデータ処理を簡単に停止できる

Koa もミドルウェアパターンを多用しているフレームワーク
コールバックを使わずに ES2015 のジェネレータ関数のみを使ってミドルウェアパターンを実装する。

コマンド

メソッドや関数を直接呼び出す変わりに、そのような呼び出しを実行する意図と同等のオブジェクトを生成する。

  • コマンド メソッドや関数を呼び出すのにひつよな情報をカプセル化したオブジェクト
  • クライアント コマンドを作成し、Invoker に提供
  • Invoker(起動役) ターゲット上でコマンドを実行
  • ターゲット(レシーバとも呼ぶ) 起動の主体、オブジェクトの唯一の関数あるいはメソッドのこと

まとめ

「公開コンストラタ」と「合成可能ファクトリ関数」のパターンは、JavaScriptデザインパターン
「非同期性」や「プロトタイプベースのプログラミング」といった特徴的な側面を扱う助けになる。

この章では、創造性と厳格さの間の正しいバランスを身につけてもらうことが目的。
本当に重要なのは設計図であり、ガイドラインであり、パターンの基礎にある考え方。
それこそが真に再利用可能な情報で、よりよい Node アプリケーションを楽しくデザインする際に活用できる

Webアプリ・プログラミング学習メモ(継続 217日目)

フロントエンドを作成しています。
とりあえず、ヘッダーの作成をとりあえず終えることにしました。

今日取り組んだこと

  • ヘッダーを作成

今後取り組むこと

  • Web アプリ開発
    • フッターを作成
    • デザインカンプを作成
    • API を作成
    • テストコードを記述

「Node.js デザインパターン 第2版」 読書 継続219日目

「Node.js デザインパターン 第 2 版」[Mario Casciaro (著), Luciano Mammino (著), 武舎 広幸 (翻訳), 阿部 和也 (翻訳)]を読んでいます。

6章 デザインパターン

JavaScript は従来型のオブジェクト指向の強い実装から見ると「パターン」とは言いにくくなっている。
JavaScript には本物のクラスや抽象インタフェースがないから。
しかし、パターンの基礎になるもともとのアイデア、解決できる問題、ソリューションの中心にある概念は変わってはいない。

ファクトリ

もっとも単純で Node でもっともよく使われるパターン

単純にnewで生成するよりも柔軟にインスタンスを生成できるようになる。

「合成可能ファクトリ関数」、複数のファクトリ関数から「合成」により機能拡張されたファクトリ関数を新たに生成できる。

公開コンストラク

比較的新しいパターン。Promise などのコアライブラリで利用されている。
executor 関数と呼ばれる関数を受け付ける。
コンストラクタのコードだけが resolve と reject にアクセスでき、いったん Promise のオブジェクトが生成されてしまうと、安全に受け渡し可能になる。

プロキシ

他のオブジェクト(「サブジェクト」)へのアクセスを制御するオブジェクト。
プロキシとサブジェクトは同一のインタフェースをもつので、両者を透過的に切り替えられる。

プロキシが有用な状況

  • データの妥当性確認
  • セキュリティ
  • キャッシュ保存
  • 遅延初期化
  • ロギング
  • リモートオブジェクト

デコレータ

既存のオブジェクトの振る舞いを動的に拡張する構造パターン。
普通の継承と異なるのは、振る舞いが同じクラスのすべてのオブジェクトに追加されるのではなく、明示的にデコレートされるインスタンスのみに追加される。

アダプタ

本来のものと異なるインタフェースを使ってオブジェクトへのアクセスを可能にする。
あるオブジェクトを、そのオブジェクトと異なるインタフェースを想定しているコンポーネントが使用できるようにするアダプタとして働く。

Webアプリ・プログラミング学習メモ(継続 216日目)

フロントエンドを作成しています。
CSS が思うように聞かないです。

今日取り組んだこと

  • フロントエンドを作成

今後取り組むこと

  • Web アプリ開発
    • デザインカンプを作成
    • API を作成
    • テストコードを記述