0

ドメイン駆動設計について一般的な質問があります。コード内に、データベース テーブル スキーマがドメイン オブジェクトと同じでない場所があります。

シナリオあげよう

Database table - 
EmployeeDepartment table has columns
1. DepartmentKey - (Integer Type)
2. DepartmentName - (Varchar)
3. FacilityName - (Varchar)

The C# domain class for it has the following 
1. Key (Integer)
2. DepartmentName (String)
3. FacilityName (Sting)
4. Employees (IList<Employees>)

この場合、同じエンティティのデータベース設計とドメイン設計の間にギャップがあります。DB では、ブリッジ テーブルを使用して、グループ内の従業員のリストにアクセスします。しかし、C# コードでは、IList を使用して Employees のリストにアクセスしています。

私は知りたいです

  1. これならいいデザイン。ドメイン駆動開発の専門家は、このギャップを回避する方法を知っていますか?

  2. このように設計を進めていくと、問題が予見できます。マッピングのテストを実施することは役に立ちますか?

4

2 に答える 2

1

コード内に、データベース テーブル スキーマがドメイン オブジェクトと同じでない場所があります。

オブジェクト関係インピーダンス不一致へようこそ:)

これは、オブジェクト/リレーショナル マッピング フレームワークを使用して解決できる古典的な問題です。

ドメイン ドリブン デザインはドメイン ファーストのアプローチであるため、この種の不一致は完全に正常です。最初はデータベースについて心配することなく、必要に応じて集計とエンティティを設計するだけです。次に、リレーショナル モデルを作成します。テーブルとエンティティが 1 対 1 で一致しない可能性があります。ここで ORM が必要になります。

于 2012-05-02T17:22:40.213 に答える
0

デザインに問題はないと思います。2 つの異なるタイプのオブジェクトを選択する場合は、Automapper を使用してこれら 2 つのオブジェクトをマッピングすることをお勧めします。その詳細については、次のリンクを確認してください。

http://www.codeproject.com/Articles/61629/AutoMapper

AND: コードの機能を検証するには、常に単体テストを使用する必要があります。ロジックを実現するためにコードを記述する必要があるため、テスト駆動開発を適用することをお勧めします。しかし、これは私の意見です!

ご挨拶

于 2012-04-30T16:26:04.440 に答える