2011-09-09 13 views
0

私は正しい方向に進むかどうかを知りたかっただけです。.netで要求 - 応答パターンを実装しています

私はすべての操作が要求オブジェクトを送信し、応答オブジェクトを戻す要求 - 応答(要求 - 応答)パターンを実装しています。例については

Public FetchCustomerResponse Fetch(FetchCustomerRequest searchObject) 

私は私のリポジトリの実装についての混乱の中で一種のです。

public interface IRepositoryReadOnly<TGetRequest, TGetResponse> : IDisposable 
{ 
    TGetResponse FetchAll(); 
    TGetResponse Fetch(TGetRequest reqObject); 
} 

public interface IRepositoryReadWrite<TGetRequest, TGetResponse, TPutRequest, TPutResponse> : IRepositoryReadOnly<TGetRequest, TGetResponse> 
{ 
    TPutResponse Insert(TPutRequest dto); 
    TPutResponse Update(TPutRequest dto); 
    void Delete(long id); 
} 

私が午前問題はvoid Delete(long id);である:私はこのような一般的なrepositiryインタフェースを持っています。

は、私は私のdeleteメソッドは、私はプロパティを持つDeleteRequestObjectを作成し、それが IRepositoryReadWriteに追加する必要など UserName, TimeStamp

のような他のフィールドを含むオブジェクトを受け入れるようにしたいですか?

これは私の見方です。 DeleteRequestとDeleteReponseオブジェクト以来

public interface IRepositoryReadWrite<TGetRequest, TGetResponse, TPutRequest, TPutResponse, TDeleteRequest, TDeleteResponse> : IRepositoryReadOnly<TGetRequest, TGetResponse> 
{ 
    TPutResponse Insert(TPutRequest dto); 
    TPutResponse Update(TPutRequest dto); 
    TDeleteResponse Delete(long TDeleteRequest); 
} 

は、すべての操作(私はそう思う)のために同じになりますこれは良い実装になるか、私はここで完全にオフトラックだし、すべて間違っていますか?

+0

'TDeleteResponse Delete(TDeleteRequest request);'は、最後のコードサンプルの最後の行に書かれていますか? –

+0

リクエスト/レスポンスパターンは、通信プロトコルが厳密ではない緩やかに結合されたシステムでのみ実際に行います。オブジェクトが相互に通信するとき、オブジェクトはコンパイラによって強制される互いの間のより明白なコントラクトを持つことができます。この場合の要求 - 応答パターンは、不要なノイズをコードに導入する可能性があります。あなたは本当に必要かどうかを検討するかもしれません。 –

+0

ドメイン駆動型デザインリポジトリでは、エンティティへのアクセスやルートの集約が可能です。リクエスト/レスポンスパターンはリポジトリにはあまり適していないと思います。要求/応答パターンは、通常、アプリケーションのサービス層で使用されます。いくつかの種類のアセンブラクラスまたはヘルパーメソッドは、要求/応答オブジェクトとドメインオブジェクトの間で変換しています。 – Hans

答えて

0

私はあなたがこのように行くかもしれないと言いますが、余分なRequest-Responseオブジェクトはあなたに害を与えません。

たとえば、IDでいくつかのエントリを絶えず削除していることがわかっている場合、定期的に1つのプロパティがいっぱいになっているリクエストオブジェクト全体を作成する必要がある場合は、 - またはネイティブクラスのメソッドでも、もしあなたが望むのであれば、それはlong idを受け入れ、あなたのリクエストオブジェクトを構築します。

idsだけを残しておけば、リクエストオブジェクトが必要になることもありますが、変更は非常に難しくなります。

関連する問題