それはどういう意味ですか?
短い答え:それはしません。
より長い答え:ドメインモデルを開発するための重要なパターンは、単なるデータベースであるソリューションの部分には適用されません。
ウディダーハンはこれを明確にするのに役立つかもしれない興味深い観察をしました
Dahanは、サービスにはある種の機能とデータの両方が必要であると考えています。データがない場合、それは単なる関数です。データに対してCRUD操作を実行するだけの場合は、データベースです。
結局のところ、ドメインモデルのポイントは、データへのすべての更新が現在のビジネスの不変を維持することを保証することです。または、言い換えると、ドメインモデルは、記録システムとして機能するデータベースが正しいことを確認する責任があります。
CRUDシステムを扱う場合、通常はデータの記録システムではありません。現実の世界では、レコードの本です、そして、あなたのデータベースは、現実の世界のちょうどローカルにキャッシュされた表現です。
たとえば、メールアドレスや政府発行の識別番号など、ユーザープロファイルに表示されるほとんどの情報には、ビジネスの外部に存在する真実の情報源があります。メールアドレスの割り当てと取り消しは、他人のメール管理者が行うあなたのアプリ。SSNを割り当てるのは政府であり、アプリではありません。
したがって、通常、外部から送られてくるデータに対してドメイン検証を行うことはありません。データが適切に形成され、適切にサニタイズされていることを確認するためのチェックを実施している場合があります。しかし、それはあなたのデータではありません-あなたのドメインモデルは拒否権を取得しません。
レイヤーを使用したDDDアプローチでは、CRUD操作がドメインレイヤーを通過するように見えます。しかし、少なくとも私たちの場合、これは意味をなさないようです。
それは右ケースのためにデータベースがレコードの本です。
ワルジーはこのように言いました。
ただし、多くのレガシーコードに取り組んでいますが、ドメイン内にあるものと外にあるものを特定するためによくある間違いを観察しています。
データモデルの周りにビジネスロジックがない場合にのみ、アプリケーションをCRUDと見なすことができます。この(まれな)場合でも、データモデルはドメインモデルではありません。これは、ビジネスロジックが関与していないため、それを管理するための抽象化が不要であることを意味し、ドメインモデルがありません。
ドメインモデルを使用して、ドメイン内に属するデータを管理します。ドメイン外のデータはすでに別の場所で管理されています-コピーをキャッシュしているだけです。
グレッグヤングは、記録簿が別の場所(つまり、倉庫の床)にあるソリューションの主要な例として倉庫システムを使用しています。彼が説明する実装は、あなたの実装とよく似ています。ウェアハウスから受信したメッセージをキャプチャする1つの論理データベースと、それらのメッセージの分析から導き出された結論をキャッシュする別の論理データベースです。
では、ここに2つの境界コンテキストがあるのでしょうか?それぞれ異なるモデルのinvestment account
多分。他の荷物と一緒に何が付属するのかはっきりしないので、境界付きのコンテキストとしてタグ付けすることには消極的です。コンテキストが2つある可能性があります。ユビキタス言語にわずかな違いがある1つのコンテキストである可能性があります。
可能なリトマステスト:このスペクトルをカバーするために2人のドメインエキスパートが必要なドメインエキスパートは何人ですか、またはコンポーネントについてさまざまな方法で話す1人のドメインエキスパートだけです。基本的に、コンウェイの法則を逆算することによって、いくつの境界のあるコンテキストを持っているかを推測できる場合があります。
境界のあるコンテキストをサービスに合わせると考えると、より簡単になる可能性があります。これらの2つの機能を個別にデプロイできる必要がありますか?はい、2つの境界のあるコンテキストを提案しています。ただし、同期を保つ必要がある場合は、おそらく1つだけです。