私はプロジェクトの基盤としてNerdDinner(MVC 2)を使用しています。リポジトリインターフェイスの設計は非常にうまく機能しますが、私の実際のアプリケーションには数十のモデルクラスがあります(NerdDinnerにはDinnerが1つしかないのに対し)。つまり、クラスごとに1つのインターフェイス(およびその実装)が必要です。さらに、基本的なインターフェイスメソッド(get、save、add、deleteなど)は同じです。つまり、すべての実装クラスで同じコードをコピーして貼り付ける必要があります。変更されるのはクラスのタイプだけです。たとえば、顧客のインターフェースは次のことを公開します。
void Add(Customer customer)
注文のインターフェースは以下を公開します:
void Add(Order order)
実装は基本的に両方の方法で同じですが、もちろん適切なモデルタイプを使用します。
db.Customers.InsertOnSubmit(customer)
と
db.Orders.InsertOnSubmit(order)
それぞれ。同じコードを何度も繰り返すのをやめる(そしてプロジェクト内の.csファイルの数を最小限に抑える)ために、次のような汎用のベースリポジトリインターフェイスを定義できると思いました。
public interface IRepository<T>
{
void Add(T t)
void Delete(T t)
void Save(); // This one is truly the same in any case!
}
しかし、どうすればジェネリック型を実装コードに適用できますか?私は次のようなものが必要です:
db.T.InsertOnSubmit(t)
これはできますか?
PS:dbはdatacontextオブジェクトです(私はlinq to sqlデザイナーを使用しています)。
ありがとう