2012-01-25 12 views
0

オブジェクトモデルをアプリケーションとして設計しており、オブジェクトとテーブルの間にインピーダンスのミスマッチがあります。例えば、私が持っている:ORMを使用したドメイン駆動設計

Product 
----------- 
ProductId, 
ProductTypeCode, 
StatusCode, 
SKUNumber 


ProductMarketAvailability 
-------------------------- 
ProductMarketAvailabilityId, 
ProductId, 
MarketId, 
Rank 

ProductDescription 
------------------ 
ProductDescriptionId, 
ProductId, 
MarketId, 
StatusId, 
DescriptionTypeId, 
Description 

(私はルックアップテーブルを示していませんでし:ステータス、DescriptionType、でProductType、市場):

Product 
-------------- 
ProductId, 
SkuNumber, 
MarketId, 
MarketName, 
StatusCode, 
Status, 
Title , 
Description, 
Caption, 
Rank 


私はドメインクラスを持つようにしたいです

LLblGenプロまたはエンティティフレームワーク:

- how i can map these tables my domain class? 
- Is it a best way to deal with this through Domain classes or better to 
    isolate domain classes from ORM generated classes 
    - If I manually map ORM classes data to my domain classes then when i 
    persisting my Domain classes (imagine they are POCO Self tracking), 
    how can i write managable , well crafted code ? 

i dont want to write , it doesnt look so right to me: 

    if (myProduct.TitleisDirty) 
    { 
     ProductDescription p= myRepository.GetDescriptionById 
     (myProduct.ProductDescriptionIdForTitle); 
     p.Description=myProduct.Title; 
     p.SubmitChanges(); 
    } 
    if (myProduct.RankisDirty) 
    { 
     ProductMarketAvailability pma= myRepository.GetMarketById 
     (myProduct.ProductMarketAvailabilityId); 
     pma.Rank=myProduct.Rank; 
     pma.SubmitChanges(); 
    } 

ありがとうございます。

答えて

0

これらのテーブルを(少なくともEFではなく)1つのクラスにマップすることはできません。あなたのモデルは、Productと他のテーブルとの1対1の関係を伝えます。彼らが同じプライマリキー(真の1:1)を共有した場合、それを1つのエンティティにマッピングできます。あなたの他の質問については

  • はそれがORMから 分離株のドメインクラスにドメインクラス以上を介してこれに対処するための最良の方法ですが、クラスを生成しましたか?

    (あなたはこのコード-最初に行う場合、彼らはとにかくPOCOSでなければなりません)手動ORM-クラスの岩下別のモデルを作成するために開始されません、選択のあなたのORMツールからクラスを使用します
  • 手動でORMクラスのデータをドメインクラスにマッピングすると、 ドメインクラス(POCOセルフトラッキング)を永続化すると、管理可能なコードを書くことができますか?

することはできません

私は、これは、従来のアプリがあることを推測していて、あなたがそう私の提案は、複数のクラスにあなたのテーブルをマッピングして、あなたが要求する機能を公開しているデータベースに触れることができないことProductクラスのラッパーとして使用できます。例:Product.MarketAvailability.Rankは、Product:Product.Rankのラッパープロパティになります。

関連する問題