2009-02-27 4 views
2

私のビジネスレイヤーにこのようなメソッドがあるとしましょう:どの層がドメインモデルを話すべきか?

// This is in the business layer 
public Result DeleteSomeDomainObject(????) 
{ 
    //Enforce business logic here. 

    //Delete records in the database 
    DAL. DeleteSomeDomainObject(???) 
} 


// This is in the data access layer 
public Result DeleteSomeDomainObject(????) 
{ 
    // Delete records from the database.  
} 

これらのメソッドは、ドメインモデルのインスタンスかプライマリキーだけを取りますか?

答えて

2

私はこれを頻繁に苦労します。私は通常、あなたのビジネス/サービス層はドメインオブジェクトをパラメータとして取るべきだと言います。

ウェブで話している場合、ウェブ層にIDが割り当てられます。サービスレイヤからオブジェクトのインスタンスをインスタンス化または取得する可能性があります。だからあなたのサービス層に渡すのが理にかなっています。

しかし、多くの場合、オブジェクトの取得を複製することになります。場合によっては、Webレイヤーにキャプチャされていない追加データがあるため、サービスがオブジェクトを読み込んでいることがあります。私はデータアクセス層が依存関係のためにオブジェクトをロードしなければならない時代もありました。キャッシュはこれらの問題のいくつかを解決し、データ/モデルを再構築することで他の問題を修正することができます。確かに。しかし、パフォーマンスやその他の問題に照らして、IDを渡すほうが理にかなっていることがあります。

要約すると、ドメイン・オブジェクトをビジネス層に渡すことを推奨します。しかし、他の理由から、あなたはIDを渡す方が良いかもしれないことに気付きます。残念ながら、あなたのルールに対する例外が必要です。

1

妥当なところであれば、ポリシーを実装から切り離すことが理にかなっています。何らかのORMを使用する予定がある場合は、ビジネスオブジェクトのインスタンスを渡すといいでしょう。

関連する問題