クラスの分類
①ドメインオブジェクト(計算判断ロジックの実装)
②アプリケーションクラス(通知・記録・計算判断の実行)
③永続化クライアント(記録・参照の実装)
④通信クライアント(通知の実装)
⑤コントローラ(外部からイベントを受け取りアプリケーションクラスのメソッドを呼び出す)
この5分類でクラスの設計パターンが異なる。
永続化や通信のクライアントとコントローラは、フレームワークなどを使って設計を簡略化できる。だいたいのパターンは決まっている。
クラス設計が難しいのはドメインオブジェクトとアプリケーションクラス。事業活動の複雑さがそのまま影響する。
ドメインオブジェクトも基本パターンは、
・値オブジェクト(金額・数量・日付など)
・範囲オブジェクト(値の始点と終点)
・区分値(振る舞いを持つ列挙型)
・コレクションオブジェクト
・それらを組み合わせた複合オブジェクト
くらい。
どんな値をクラスにし、どう組み合わせるかの判断が難しい
アプリケーションクラスは、さまざまな関心事が混在しやすい。
たとえば、注文処理のアプリケーションクラスは商流・物流・金流の関心事が混在している。
記録すべき情報や通知先も関心事が混在する。
こらの関心事を別のクラスに分けて記述し、それらを使って全体の流れを組み立てるクラスを設計する
永続化のインタフェース宣言と実装、通信のインタフェース宣言と実装もアプリケーションクラスの関心事の分け方に合わせて分解する。
どこかで組み立てる必要があるが、それを実装クラスが受け持つか、アプリケーションクラスで受け持つかは、実際に書いてみて、どちらがよりわかりやすいかを実験する