AI時代においてドメインモデルがより重要になる理由
ソフトウェアアーキテクチャは、しばしば勝者のいない議論になりがちです。あるシステムを構築したとしても、同じ条件下で別の選択肢を構築することはありません。そのため、あらゆる決定が反証不可能になります。システムが失敗したとき、人々はドメインやチームのせいにします。比較対象となる対照群が存在しないため、アーキテクチャが原因だと責められることは滅多にありません。
私たちには、設計をテストする方法が必要です。「本質的な複雑さ(essential complexity)」と「偶発的な複雑さ(accidental complexity)」を切り分けなければなりません。本質的な複雑さとは、問題そのもののことです。偶発的な複雑さとは、ツールやプロセスによって生み出してしまう混乱のことです。
AIによって、実装コストはほぼゼロになりました。これは巨大な転換です。かつては、コードを書く際の摩擦(手間)が、開発者に優れた構造を作ることを強いていました。コードが乱雑であれば、管理が困難になります。その苦しみこそが、フィードバックループとして機能していたのです。
AIはその摩擦を取り除いてしまいます。AIは、クリーンなコードと同じ速さで、乱雑で構造の悪いコードを書くことができます。不適切なモデルによる苦しみは、もはやビルド中に開発者に降りかかることはありません。その代わりに、その苦しみは本番環境へと移ります。データが破損し、統合作業が不可能になるという形で現れるのです。
リッチなドメインモデル(rich domain model)は、これを防ぐためのツールです。それは具体的に3つの役割を果たします。
- コンセプトに形を与えることを強制することで、ドメインの理解を助けます。
- ドメインを定義するため、「何を構築すべきか」が推測ではなくなります。
- コンパイラを通じて常に最新の状態に保たれるコードとして、ドメインをドキュメント化します。
ドメインモデルが機能するためには、3つのルールに従う必要があります。
- 本質的な複雑さを一塊に保つこと。単一のコンセプトを数百ものマイクロサービスに分散させてはいけません。
- フィードバックを提供すること。誤った仮定は、サイレントなバグではなく、コンパイルエラーを引き起こすべきです。
- 変更コストを低く抑えること。あるコンセプトを修正する場合、10個ものサービスを探し回るのではなく、1箇所で修正できるようにすべきです。
「肥大化」を防ぐためにドメインを早すぎる段階でマイクロサービスに分割してしまうと、単に混乱を移動させているだけになることがよくあります。「神オブジェクト(god object)」を、追跡がより困難な分散型の混乱へと置き換えているに過ぎません。目に見えない依存関係は、本番環境で壊れる依存関係なのです。
リッチなドメインモデルの目的は、正解することではありません。修正コストがまだ低い段階で、間違いを可視化することなのです。
Source: https://dev.to/leonpennings/what-is-the-reason-for-using-a-rich-domain-model-in-the-age-of-ai-3gg
Optional learning community: https://t.me/GyaanSetuAi