Always Valid Domain Model
1. 目的
2. 課題
- 不正なデータモデルが作れてしまうとシステムの信頼性/頑健性を保証できない
- ドメインモデルを自由闊達に生成・変更できると、論理的に不整合なデータを作ることが簡単にできてしまう
- そのようなコードは文法的には問題ないのでコンパイラのチェックをすり抜けてしまう
- コードレビューで発見するのも限界があり、見逃しが発生する可能性を否定できない
3. 解決策
ドメインモデルの
- ドメインモデルを常に有効な状態にする
- 不整合な状態や無効な状態にならないようにする
- 具体的には不変条件の維持、無効な状態の不許可、コンストラクタでの初期化、状態変化をメソッド経由で行う、など
4. メリット
- システムの信頼性向上
- デバッグ容易性向上
- ドメインルールの明確化
5. デメリット
6. 注意事項
参考資料
Appendix-1 覚書
- ドメインオブジェクトはValidな状態でしか生成できないようにせよという設計指針
- ドメインオブジェクトの利用側に「正しい」状態を把握させるのはカプセル化が破れているという事だし、何より不注意でバグを生じやすい
- 具体的にはコンストラクタやファクトリなどで「正しくない」値はエラーにしてしまい、ドメインオブジェクトを利用する側は常に「正しい」状態のドメインオブジェクトを利用する事を強制する