ドメイン駆動設計とは:
知識、影響、または活動の領域をドメインとして小さな単位で定義して問題を解決していきましょうというアプローチ設計。ドメインエキスパート(業務知識保有者)と開発者がコミュニケーションを取り、ドメイン知識をドメインモデルへと反復的に反映していく。
ドメイン:
知識、影響、または活動の領域
ドメインオブジェクト:
目的として分割された単位のオブジェクト(クラス)
ドメインの分け方:
これはどれがいいというベストなものは無く、業務として分けやすい単位・依存性が小さい単位で分けるのがベストとのこと。
ドメインの分け方コツ:
ユースケースの分析を行い、目的を具体化して分割する。
基本テクニック例:
・値オブジェクト:値を持つクラスに計算ロジックを持たせる
・エンティティ:ライフサイクル(例として登録、更新、削除等)を持ったオブジェクト
・コレクションオブジェクト:値のコレクションと、コレクションを操作するロジックを独立したクラスに分離する
・区分オブジェクト:区分ごとの定数やロジックを別のクラスに分け分岐の記述を減らす
最後に筆者の所感として:
関心ごとや複雑な仕事はできるだけシンプルに分割してドメイン(クラス)化して、影響範囲やロジックを可視化させた方が開発や保守・改修が楽ですよという感じの設計手法