プレゼンテーション・ドメイン分離
プレゼンテーション・ドメイン分離
Presentation
「表現」
ユーザーインターフェース
HTML / JSON(WebAPI) / CLI ...
Domain
「領域」
ソフトウェア設計において、「そのアプリケーションが対象としてる課題そのもの」。「業務」にも近い意味
「プレゼンテーション」と「ドメイン」を分離する
プレゼンテーションはドメインに依存してもいいが、ドメインはプレゼンテーションに依存してはいけない
例:Google
プレゼンテーション
google.comの検索フォーム
Google Chromeの検索バー
iOS Safari検索バー
ドメイン
インターネット文書の検索
プレゼンテーションはいずれもドメインに依存している
どのプレゼンテーションを使っても検索結果は一緒
ドメインがプレゼンテーション毎に分かれていた場合...
ドメインの機能追加・バグ修正する際に、それぞれのドメインに手を加えなくてはなくなる
ex: MVCはプレゼンテーション・ドメイン分離の手段のひとつ
実際にプレゼンテーション・ドメインを分離するにはどうしたら・・・?
例: 同じファイルを読み込んで表示するWebAPIとCLIアプリを作ってみる
ドメインロジックをWebからもCLIからも呼び出す
WebとCLIそれぞれロックインされた書き方とドメインは分離する
プレゼンテーションから分離されているコード≒テストしやすいコード
WebにもCLIにも依存していないテストコードを書ける
ロジックだけをテストできる
reactの場合
コンポーネントではViewだけ
ロジックはカスタムフックスに持たせる
適切に設計されたアプリケーションは、どこに何を記載するのか自明になる