c# - 实现抽象工厂模式的正确方法?

标签 c# design-patterns data-access-layer abstract-factory

我即将用古老的 ado.net 方式构建一个数据访问层。传统上,我会根据简单的存储库模式构建 dal。但这次我想尝试一下抽象工厂模式,因为我最近在一篇文章中读到了有关此模式的内容。

所以在这里我尝试使用抽象工厂模式编写 dal 代码。首先让我解释一下到目前为止我得到了什么。之后我想知道的是我的方法是否是实现此模式的正确方法以及存储库方法的优点是什么。

所以我编写了以下类:

public abstract class Db
{
     //this is class will contain methods like:
     //public abstract IDbConnection CreateConnectionInstance();
}

public class SqlDb : Db
{
     //this is class will contain methods like:
     //public override IDbConnection CreateConnectionInstance()
     //{
     //      ... return new SqlConnection();
     //}
}

public class OracleDb : Db
{

}

public class MockupDb : Db
{

}

//this class generates the fitting provider but does not have a base (is this correct?)
public static class DbFactory
{
    public static Db CreateInstance(DbProviderType dbProviderType)
    {
        Db db = null;
        switch (dbProviderType)
        {
            case DbProviderType.Oracle:
                db = new OracleDb();
                break;
            case DbProviderType.Sql:
                db = new SqlDb();
                break;
            case DbProviderType.Mockup:
                db = new MockupDb();
                break;
            default:
                break;
        }
        return db;
    }
}

简而言之,我的问题是: 1)这是抽象工厂模式的正确实现吗? 2)哪些方面可以做得更好? 3)从基类继承的不同存储库类的优点是什么?

谢谢大家。

如果您需要有关我的代码的更多信息,请告诉我。但目前已经没有更多了!

最佳答案

抽象数据库提供程序工厂已存在于.Net 中。它叫DbProviderFactory 。您可以通过创建不同的具体工厂

var factory = DbProviderFactories.GetFactory("System.Data.OracleClient");
DbConnection connection = factory.CreateConnection();

为什么不使用盒子里已有的东西?

Here您可以阅读有关 DbProviderFactories 以及如何添加自定义工厂实现的更多信息。

关于c# - 实现抽象工厂模式的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10349012/

相关文章:

c# - 可以在 Entity Framework 的 CreateOrUpdate 方法中依赖 try-catch 吗?

c# - asp .net 每天扫描一次文件夹

c# - 如何指定“字符

c#-3.0 - MSTest 与 Moq - DAL 设置

c# - ASP.NET MVC : Programmatically set HTTP headers on static content

java - 客户端/服务器——服务器可能会改变,如何将其抽象掉?

web-services - 调用 Web 服务时使用服务代理

java - 将一种模型转换为另一种模型的设计模式

c# - 面向 future 的 DAL

sql - 值得自己测试数据访问查询吗?