0

アプリケーションのオブジェクト モデルを設計していますが、オブジェクトとテーブルの間に確実なレベルのインピーダンスのミスマッチがあります。たとえば、私は持っています:

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


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

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

(ルックアップ テーブル: Status、DescriptionType、ProductType、Market は説明しませんでした)


DOMAIN CLASSが必要です:

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

LLblGen pro または Entity Framework の場合:

 - 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();
    }

読んでいただきありがとうございます。

4

1 に答える 1

0

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

他の質問について:

  • ドメインクラスを介してこれに対処するのが最善の方法ですか、それともドメインクラスをORM生成クラスから分離するのが良いですか?

選択した ORM ツールのクラスを使用します。ORM クラスの上に別のモデルを手動で作成し始めないでください (このコードを最初に実行する場合、とにかく POCO にする必要があります)。

  • ORM クラスのデータを自分のドメイン クラスに手動でマップした場合、ドメイン クラスを永続化するとき (POCO セルフ トラッキングだと想像してください)、管理しやすく、巧妙に作成されたコードを作成するにはどうすればよいでしょうか?

できません

これはレガシ アプリであり、データベースにアクセスできないと推測しているため、テーブルを複数のクラスにマップし、要求した機能を Product クラスを介してラッパーとして公開することをお勧めします。例: Product.MarketAvailability.Rank は、製品のラッパー プロパティになります: Product.Rank。

于 2012-01-31T19:45:00.897 に答える