2011-02-03 1 views
2

私はC#の設計上の問題(リポジトリデザインパターン)に関する助けが必要です。私はいくつかのタイプの「製品」を持つシステムを持っています。各製品には「検索」機能があります。私は、再利用可能/汎用の検索インターフェースを設計したいと考えています。検索対象の製品によっては、検索基準と返されるデータが異なる場合があります。リポジトリパターンの質問とジェネリック?

検索機能は特定の製品タイプでのみ検索します。今のところ検索は唯一の機能ですが、将来的にはそのタイプに応じて異なる動作をする「GetByID」のような他の機能が存在する可能性があります。私の問題は何かあるビジネス 『クラス

public class ProductBusiness 
{ 
    IProduct _product; 

    public ProductBusiness(IProduct product) 
    { 
     _product = product 
    } 


    public [return type?] DoSearch([parameters]) 
    { 
     return _product.DoSearch([paramters]); 
    } 
} 

:「機能

public interface IProduct 
{ 
    [return type?] DoSearch([paramters?]); 
    ... 
} 

public class Product1 : IProduct 
{ 
    [product1 result] DoSearch([parameters?]) 
    { 
      //Do searching logic 
     return [product1 result] 
    } 
} 

が、私は持っているでしょう

DoSearch』

私の最初の考えはとの「製品」のインターフェイスを作成していましたビジネスクラス "generic"の[parameters]と[return type]を、製品タイプによって異なります。

クライアントコードusこれは次のようになります。

ProductBusiness productBusiness = new ProductBusiness(new Product1()); 
[product1 result] = productBusiness.DoSearch[parameters]); 

...process result code 

答えて

5

私はこのようなものを実装します。これは一般的なものであり、コードの最も大きな部分はリポジトリの基本クラスに実装できます。

public interface IRepository<T> where T: IProduct 
{ 
    IEnumerable<T> Search(Predicate<T> query) 
    IEnumerable<T> Search(IEnumerable<Predicate<T>> query> 

} 
+0

例を完成させるために、リポジトリへの呼び出しがどのようなものかの例を追加できれば素晴らしいと思います... – Fenton

関連する問題