メインコンテンツまでスキップ

0001 — 厳密なDDDと純粋なCore

コンテキスト​

このアプリは実際のお金を動かします。ビジネスルールがエンドポイント、バックグラウンドサービス、Razorコンポーネントに散在すると、テスト不可能で矛盾した動作に腐敗します。ちょうどそこでバグはユーザーの資本を失わせます。

決定​

ドメインロジックはsrc/Coreのアグリゲート、値オブジェクト、ドメインサービス上に存在し、ゼロのインフラストラクチャ依存性(EF、HttpClient、Docker、ASP.NETなし)でコンパイルされます。エンドポイント、MCPツール、コンポーネント、BackgroundServiceはオーケストレートします。決して決定しません。ルール:

  • 公開セッターなし。状態変更は不変性を保護する意図を明確にするメソッドを通じて。
  • アグリゲートは強いIDで相互参照し、ナビゲーションプロパティでは参照しない。
  • 1つのSaveChangesは1つのアグリゲートを変更。クロスアグリゲートフローはドメインイベントを使用。
  • ドメイン境界を超える原始型は値オブジェクトでラップ。
  • 不変性違反は、フレームワーク例外ではなく、CoreDomainExceptionをスロー。

結果​

  • ドメインルールは、データベースやウェブホストなしでユニットテスト可能。
  • Coreの純粋性はArchitectureGuardTestsによって機械的に実行され、破られた場合はビルド失敗。
  • 貧血性モデルよりは多くセレモニーがあります(値オブジェクト、強いID、ドメインイベント)。これはお金を動かすルールを正確に保ち、1つの場所に保つための意図的なコストです。