我即将用古老的 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/