2012-02-09 2 views
1

新しいプロジェクトにDDDを適用しようとしています。 サンプルプロジェクトとしてMicrosoft DDD Nlayerを使用しています。 これは、Microsoft Nlayer DDDではなく、DDDの質問の多くです。 DDDでは、データレイヤーをアプリケーションレイヤーでのみ作成し、ドメインレイヤーでは作成しないとします。しかし、ドキュメントでは、依然としてデータレイヤーをドメインレイヤーから呼び出すことができます(まだそれを避けると言います)。どうやってやるの? Visual Studioの[データレイヤー]フォームの[ドメイン]レイヤーの参照を追加しようとすると、 'このプロジェクトを参照として追加すると循環が発生します。 私はアプリケーション層でデータを取得してからそれをドメイン層に渡すことができますが、それは常にロジックに基づいてデータを取得する必要があるとは限りません。 データにアクセスできない場合は、どのようなロジックをドメインレイヤに追加できますか?ほとんどの時間ロジックは、別のクラスとそのデータに基づいています(同じドメイン内または別のドメイン内)。 私を案内してください。これは、レイヤーが互いにどのように話し合うべきかを知らないということを知らないことです。NLayered DDD(ドメインドリブンデザイン)でレイヤー同士の会話

答えて

1

これはソフトウェア(少なくともOLTPの種類)の仕組みではありません。使用例を考えて、関係するオブジェクトを考えてみましょう。事前にすべてのデータを照会してください。データを使用してオブジェクトをインスタンス化します。ユースケースを実行するためにオブジェクトを共同させる。変更されたオブジェクトのデータを保存します。以下

例:あなたが一度にあまりにも多くのオブジェクトを変更する場合

public class IncludePhotoInPortfolioHandler { 
    public void Handle(IncludePhotoInPortfolio useCase) { 
    var photo = _photoRepo.GetById(useCase.PhotoId); 
    var portfolio = _portfolioRepo.GetById(useCase.PortfolioId); 
    portfolio.Include(photo); 
    } 
} 

、あなたは間違ってそれをやっています。あなたはあらゆる種類の厄介な問題にぶつかるでしょう。奇妙なケースでは、オブジェクトに存在する識別子に基づいてデータ/オブジェクトをフェッチし、それらの識別子を(何らかの形で)公開し、関連オブジェクトをフェッチする必要があります。

ヒント:代わりに、このNLayered DDDプロジェクトで自分の頭をこだわりの青本でDDD上に読みたいかもしれません。ペデスタルの上にレイヤーを置かないでください。

関連する問題