制作数据访问层的最佳方法是什么?

4

我希望创建一个完美的自定义 DAL(数据抽象层)类,以便在所有项目中使用。

我已经在互联网上搜索到了一些示例,但我从未知道哪种方法是最好的。

是制作 [Attributes]?还是使用 <Generics> 或其他方法?

因此,请给我一个标题,然后我会从那里开始。

再次感谢,不要介意我的语言表达。

9个回答

10

请确保:

  • 始终使用存储过程
  • 永远不要使用存储过程
  • 有时候使用存储过程
  • 使用nHibernate
  • 使用SubSonic
  • 使用Entity Framework
  • 编写你自己的代码
  • 永远不要编写你自己的代码
  • 使用POCO
  • 使用ActiveRecord
  • 使用IRepository
  • 始终遵循Fowler的建议
  • 永远不要遵循Fowler的建议
  • 不要使用Linq to SQL,因为它已经过时了
  • 使用Linq to SQL,因为它现在已经不再过时

只要做到这些,你就没问题了。


这听起来像是东跑西颠的。不是吗(: (: - Wahid Bitar

6

最好的方法是:

除非你是在进行学术研究项目或者打算创建一个ORM的业务,否则不要自己动手。

首先尝试使用现有的数十种ORM解决方案。(Entity framework、subsonic、nhibernate等等...)。它们都有各自的怪癖和限制,同时也混合了大量的优秀特性。

ORM非常难以正确实现,需要付出巨大的努力。

略微相关并且很到位:http://wekeroad.com/2009/06/11/youre-not-your-data-access/


1
Wahid询问如何构建持久层(数据抽象层)的结构,而不是询问如何编写ORM。 - Jim Ferrans
也许,这并不清晰... 但是,他可以使用的结构取决于他将要使用的ORM。许多ORM不支持POCO持久化,一些ORM(如Rails active record或LINQ to SQL)会规定某些结构。这完全取决于情况,并且几乎没有一个“最好”的方式。如果你想要一个好的架构概念,可以了解一下仓储库模式(repository pattern)。http://geekswithblogs.net/gyoung/archive/2006/05/03/77171.aspx - Sam Saffron


4
如果您是初学者,我建议使用SubSonic(尤其是在Web开发中)。

1

正如其他人所提到的,不要试图自己实现ORM工具,因为有很多免费的工具可用。但是DAL并不是ORM工具,ORM工具将在您的DAL中使用。 DAL仅用于隐藏数据访问逻辑,以便在最终您的应用程序中拥有更易于维护的解决方案。最终,您还可以在DAO类中使用普通的SQL语句。创建DAL时需要注意的是尽可能将其与应用程序/其他层分离。这可以通过针对接口编码和使用依赖注入来实现。Spring在这里非常有帮助(如果您使用Java编程)。除此之外,构建这样的层并没有太大的魔法。


1

绝对不要编写自己的持久性管理器。如果您想从类结构开始,并希望ORM为您生成SQL表结构,则应使用对象关系映射器(ORM),或者如果您想从SQL表开始,并且希望您的类表示表行,则应使用SQL Mapper。

我使用iBatis SQL Mapper有很好的经验,很多人喜欢Hibernate作为ORM(虽然有一定的学习曲线)。

Martin Fowler在《企业应用架构模式》中描述了编写数据访问层的几种好方法(这是一个目录)。

例如,iBatis for .NET 使用 Fowler 的Table Data Gateway模式。在 iBatis 中,您可以在 XML 中指定 Table Data Gateway 对象。每个 Gateway 通常管理对一个 SQL 表的访问,尽管您也可以执行多表操作。Gateway 由 SQL 语句组成,每个语句都包装在一小段 XML 中。每个 SELECT 返回一个或多个行对象,这些对象只是属性集加上 getter 和 setter 方法(在 .NET 中称为 POCOs 或 PONOs,即 Plain Old C# Objects 或 Plain Old .NET Objects)。每个 INSERT 或 UPDATE 都以 POCO 作为其输入。这似乎相当直观,而且不太难学。

1

试图创建终极、最佳、完美的数据访问层似乎有点疯狂——因为有太多不同的应用场景,有不同和竞争的要求和需求,我不相信任何人能想出“唯一”的终极数据访问层。

你需要查看一些现有的ORM工具,了解其中一两个,知道它们的优点和可能的缺点,然后能够为每种情况选择最好的一个。我怀疑它不会总是相同的......

SubSonic非常适合较小、更灵活的项目——Linq-to-SQL也是如此,只要你使用SQL Server作为后端。如果你需要更强大的企业级功能,你应该看看NHibernate、ADO.NET Entity Framework或其他更大、更有能力的玩家(这些玩家对于小而简单的场景来说过于复杂,不适合)。

我不认为有“完美”的创建数据访问层的方法——学习可用的内容,学会如何选择最适合当前需求的内容,不要重复造轮子——使用已经存在的东西!

Marc


1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接