在 .NET 1.1 (C#) 中使用存储库模式的典型方法是什么?
我正在寻找与 this Stack Overflow question 类似的东西,除了在 .NET 1.1 中,我没有泛型,所以我只是想看看它是否可能(我确信它是可能的),以及它通常是如何完成的。
最佳答案
这是很有可能的,但您要么不使用通用接口(interface),要么进行大量转换。使用界面 ...
public interface IRepository
{
public object Get(int id); // or object id
public void Save(object obj);
}
public class CustomerRepository : IRepository
{
public object Get(int id) { // implementation }
public void Save(object obj) { // implementation }
}
这工作正常,但调用代码必须将对象转换为正确的类型,具体实现中的方法必须检查类型并抛出异常。直接转换要求运行时异常,所以我会避免这种方法。
我建议的方法是不要让您的存储库实现通用接口(interface)。取而代之的是让他们按照惯例实现通常命名的方法。
public class CustomerRepository
{
public Customer Get(int id) { // implementation }
public void Save(Customer entity) { // implementation }
}
public class EmployeeRepository
{
public Employee Get(int id) { // implementation }
public void Save(Employee entity) { // implementation }
}
编辑添加:我重新阅读了链接的答案。最后一段让我迷失了,但我可以扩展一下使用 DI。在大多数情况下,使用 DI 注入(inject)“通用”(在本例中是指从公共(public)接口(interface)派生)存储库是没有意义的。除了常用方法之外,存储库还将具有特定于实体的方法,例如 GetCustomersWithPastDueAccounts
。您可以使用该方法定义一个 ICustomerRepository 并让您的 CustomerRepository 实现它。然后您可以使用依赖注入(inject)在运行时注入(inject) CustomerRepository。这没有任何问题,但根据我的经验,您很少会拥有存储库的多个实现,因此这样做没有什么意义。
关于c# - .NET 1.1 的存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100105/