繁体   English   中英

数据访问层设计模式

[英]Data Access Layer design patterns

我必须设计一个带.NET的数据访问层,它可能会使用多个具有相同关系设计的数据库管理系统(Mysql和Sql Server)。

基本上,从一个数据库切换到另一个数据库必须简单,所以我希望你向我推荐一些对你有用的网站或书籍,通常的设计模式或信息来实现这种数据访问层。

谢谢。

我推荐Martin Fowler的企业应用程序架构模式。

他的网站上也有一系列模式

DataMapper模式也很重要。

我喜欢使用基于接口的Db访问。 Ado.net的每个数据库提供程序都实现了基本接口,当您使用它们时,您的代码可能如下所示:

public static IDbConnection GetConnection(string connectionName)
{
  ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName];
  DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName);
  IDbConnection Connection = Factory.CreateConnection();
  Connection.ConnectionString = ConnectString.ConnectionString;
  return Connection;
}

然后,当您需要与db通信时:

public static DataTable Dummy()
{
  using (IDbConnection Connection = GetConnection("SiteSqlServer"))
  {
    IDbCommand Command = Connection.CreateCommand();
    Command.CommandText = "DummyCommand";
    Command.CommandType = CommandType.StoredProcedure;

    Connection.Open();

    using (IDataReader reader = Command.ExecuteReader())
    {
      DataTable Result = new DataTable();
      Result.Load(reader);
      return Result;
    }
  }
}

使用此技术,您可以创建完全独立于数据库的DAL。 当然,对于一些复杂的情况,这还不够。 但大多数情况下这将完成工作,并且您不需要各种外部库。

最简单的解决方案是使用ORM。 查看LLBLGen。 使用适配器模型,您可以在使用相同的业务对象时在数据提供程序之间切换。 它可以为MySql和Sql Server生成代码。

总的来说,我是John Nolan 对企业应用程序架构模式的第二个推荐。

更具体地说,我总是建议您在接口后面隐藏数据访问层,并使用依赖注入在运行时将特定的数据访问组件注入域逻辑。

您可以使用依赖注入容器或手动执行

在技​​术方面,我会推荐Microsoft的Entity Framework ,因为您的数据访问需求似乎受限于关系数据库。 实体框架是微软官方的OR / M,它提供许多不同的RDBMS以及LINQ支持。

这实际上取决于图层的大小和您开发的产品类型。 如果它包含得相当好,那么ADO.NET可能是理想的。 如果它是一个更大的DAL层,并且它的多区域dbms的绿地开发,最好使用ORM工具。 它们是快速,高效和成熟的产品,只需更改单个参数即可快速启用到另一个数据库的重新定位。 编写静态ADO是传递给遗留的东西。

有几个ORM工具可以完成这项工作,所有工作都略有不同,并且取决于您的预算,团队规模等。他们可以通过编写像NHibernate这样的映射类来工作,或者通过反射工作,即属性标记。

对于免费,即开源,如果你的skint,NHibernate是理想的。 我现在正在使用它,为大型企业产品构建DAL层。 它的优秀,但需要一些时间来掌握。 使用NHibernate,您可以定义映射类,在执行时为您生成db模型。 它支持存储过程。 缺点是需要一些时间来学习,特别是在正确映射复杂数据方面。 它的优秀。 它有一大堆样本和其他项目浮动使用它。 看看Koders.com。

如果你有一些预算,那么LLBLGen是理想的选择。 它是强类型的,也支持存储过程。

如果某些数据模型已经可用,那么TierDeveloper是理想的选择。 它基本上是免费的,并且通过从数据库模型开发一组类来工作。 唯一的缺点是mysql的mapper是第三方。 它是一个企业级产品,可以自由支持ncache,它是一种可能的方法。

如果您迫切希望坚持使用MS,他们将转向ORM,并拥有一个名为ADO.NET Entity Framework的产品。 从功能上讲,它不如上面定义的工具那么完整。 它在成熟时落后约3代。 它在vs sp1中可用。 mysql的连接器是一个成本。

此外,您可以使用LINQ。 如果你还需要连接器,它也将以mysql为目标。

理想情况下,最好的选择是使用ORM。 如果你不能支持开源,并有预算,那就搞定吧

希望有所帮助。

我发现ADO.NET对此非常有用。 它具有创建独立于您使用的数据库的数据访问层所需的所有功能。

如果您愿意学习它, NHibernate旨在处理这种情况

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM