ドメイン駆動設計
別名: ドメイン駆動開発
GoFデザインパターンなど様々な知見の集積.
テスト駆動開発を用いる.
ヘキサゴナルアーキテクチャが特徴的.
かつては階層化アーキテクチャが推奨されていた.
実例
ドメイン
ドメインは最上位として外を参照しない.
インフラストラクチャ
インフラストラクチャはドメインを参照する.
フレームワーク: UI
フレームワークはドメインとインフラストラクチャを参照し利用する.
の3要素+テストの4つのコンポーネントから構成する.
アプリケーション層は必要ないという立場がある.
ドメイン
Entities: エンティティ
データベースの行に相当するものを扱う.
一意であることが要求される.
Guidの利用など.
完全コンストラクタパターンを積極的に利用する.
行の中の列に対するビジネスロジックはここに記述する.
ValueObjects
様々な値をクラスとして扱うためのもの.
できるだけ早くValueObjectに変換して値に知識を吹き込むこと.
Repositories: Repository
基本的にinterfaceで表現する.
インフラストラクチャの処理の定義を記述する.
外部のテクノロジと接触する部分はすべてここに記述する.
Exceptions: 例外
Exceptionを継承した例外の集まり.
Helpers
staticでどこにあってもよく,害のないもの.
他のプロジェクトでもそのまま利用できるようなもの.
配列をCSVにしてくれるやつとか.
StaticValues
メモリ上に保持しておきたい値をキャッシュする領域を定義する.
データベースのキャッシュなど.
マスタデータなど.
Logics
ビジネスロジックであるが,staticで独立したもの.
医療系のアプリケーションにおいて,血圧や温度から診断するロジックなど.
どのアプリケーションでも共通に使えるようなものはHelpersに入れる.
Modules
staticでないモジュール.
インフラストラクチャ
利用するテクノロジごとに名前空間を作成する.
SQL,CSVなど
Fake: ダミーデータ
本番とFakeの切り替えはFactoryを利用する.
Factoryのみをpublicにする.
Factory経由に限られる.
一部だけ本番になっていないなどの状態を回避できる.
UI: ViewとViewModelが相当.
Views
ViewModels
イベント発動関連はすべてここにまとめる.
タイマなど.
トランザクションもViewModelで行う.
トランザクションは利用側が自由にできるようにするため.