読書ログ:『ドメイン駆動設計入門-5、6章』
このnoteは「ドメイン駆動設計入門」の読書記録です。
5章-データにまつわる処理を分離する「リポジトリ」と6章-ユースケースを実現する「アプリケーションサービス」を読みました📚
リポジトリの責務
ドメインオブジェクトの永続化(保存)と再構築(復元)を行うこと。ドメインをうまく表現するというドメイン設計の構成要素としてリポジトリは欠かせない。
nullの是非
nullは人類が取り扱うには難しい概念。nullを発端とするバグは多くの開発者を悩ませる。最善の手段はnullを扱わない、nullが存在しないプログラミング言語を使う。
テストによる確認
ドメインの変化を受けてソフトウェアが変化するためにはテストを用意することが重要。データベースに依存しないテスト用のリポジトリを利用することで効率的にテストが行える
アプリケーションサービス
ユースケース(ユーザー情報を登録する、変更するなど)を実現するオブジェクト。ドメインオブジェクトのふるまいを呼び出す役目を担う。ドメインオブジェクトを直接公開せず、データ転送用オブジェクト(DTO)にデータを移し替えてクライアントに返却するのがよい。
プログラムの凝集度
モジュールの責任範囲がどれだけ集中しているかを測る尺度。凝集度が高いと、堅牢性・信頼性・再利用性・可読性の観点から好ましい。凝集度を測る方法がLCOM。あるクラスの全てのインスタンス変数は、全てのメソッドで使われるべきという考え方。
ドメインサービスとの違い
対象となる領域が異なるだけで、本質的には同じ。例えばユーザーの重複確認はドメインの活動。アプリケーション固有の機能(ユーザー登録や退会など)はアプリケーションサービス。