2012-04-30 10 views
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. 私はこのような設計を続けることで問題を予見できます。マッピングのテストを実施するのが助けになるのでしょうか?

+0

ブリッジテーブルとはどういう意味ですか?あなたはそれが多対多の関係であることを意味しますか? – empi

答えて

1

私は、データベーステーブルのスキーマは、それのためのドメインオブジェクトと同じ ではありません私のコード内の場所を持っています。オブジェクト・リレーショナルimpedance mismatch

ようこそ:)

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

ドメインドリブンデザインはドメインファーストのアプローチであり、このような不一致は完全に正常です。最初にデータベースを気にすることなく、集計とエンティティを適切に設計してください。その後、リレーショナル・モデルを作成します。テーブルとエンティティの間に1対1のマッチングはありませんが、これがORMが必要な場所です。

0

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

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

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

挨拶

関連する問題