我使用 NerdDinner (MVC 2) 作为我项目的基础。虽然存储库接口设计工作得很好,但在我的实际应用程序中有十几个模型类(而 NerdDinner 只有一个,Dinner),这意味着我需要为每个类一个接口(及其实现)。此外,基本的接口方法(获取、保存、添加、删除等)是相同的,这意味着我必须在每个实现类中复制和粘贴相同的代码。唯一改变的是类的类型,例如客户的接口暴露:
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 是数据上下文对象(我使用的是 linq to sql 设计器)。
谢谢