c# - .NET 1.1 的存储库模式

标签 c# asp.net repository-pattern .net-1.1

在 .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/

相关文章:

C# WPF - 拖动图像

c# - 特殊字符不显示在带有参数的 SQL 数据库的 gridview 中

c# - 从 asp.net 中的文本框中获取希伯来语字符

asp.net-mvc - MVC : Repositories and Services

c#调用另一个winform上的按钮事件

c# - 为 XNA 创建我自己的 FBX 文件? (在 3ds max 中)

c# - 如何使用 wait 或 thread 等到事件发生

ASP.NET 代码生成器

c# - 是否可以将此代码的第二部分用于存储库模式和泛型

java - 我应该为负责在文件系统上持久保存数据的 bean 使用 @Repository Spring 注释吗?