制作DAL的最佳方法是什么?

时间:2009-06-13 10:13:23

标签: c# .net asp.net data-access-layer

我想制作一个完美的自定义DAL(数据抽象层)类,用于我的所有项目。

我搜索了互联网并找到了一些样本,但我不知道哪种方法最好。

要制作[Attributes]吗?或者使用<Generics>或其他?

所以,请给我一个头条,我会从那里继续。

再次感谢并原谅我的语言。

9 个答案:

答案 0 :(得分:10)

请确保你:

  • 始终使用存储过程
  • 永远不要使用存储过程
  • 有时使用存储过程
  • 使用nHibernate
  • 使用SubSonic
  • 使用实体框架
  • 自己编写
  • 永远不要自己写
  • 使用POCO
  • 使用ActiveRecord
  • 使用IRepository
  • 永远做福勒所说的
  • 永远不要做福勒所说的
  • 不要使用Linq来SQL,它已经死了
  • 使用Linq to SQL,它不再死了

做所有这些,你会没事的。

答案 1 :(得分:6)

最佳方法是:

不要自己动手,除非它是用于学术研究项目或您打算建立运输ORM的商业。

首先尝试几十个现有的ORM解决方案。 (实体框架,亚音速,nhibernate等等......)。他们都有他们的怪癖和局限,并且有很多令人敬畏的东西。

ORM非常难以正确行事,也是一项艰巨的任务。

与钱有点关联:http://wekeroad.com/2009/06/11/youre-not-your-data-access/

答案 2 :(得分:5)

答案 3 :(得分:4)

如果您是初学者,我建议您使用SubSonic(如果您正在进行网络开发,则更多)。

答案 4 :(得分:1)

同样提到的一个,不要试图自己实现ORM工具,有很多免费提供。但是DAL不是ORM工具,ORM工具将在您的DAL中使用。 DAL仅用于从应用程序的其余部分隐藏数据访问逻辑,以便拥有更易于维护的解决方案。最后,您还可以拥有正常的SQL语句。你的DAO课程。创建DAL时应注意的是尽可能将其与app / other层的其余部分分离。这可以通过对接口进行编码并使用依赖注入来实现。 Spring在这里是一个很好的帮助(给你Java程序)。除此之外,建立这样一层并没有什么大的魔力。

答案 5 :(得分:1)

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

我在使用iBatis SQL Mapper方面有很好的经验,很多人喜欢Hibernate用于ORM(虽然有学习曲线)。

Martin Fowler介绍了在Patterns of Enterprise Application Architecture中编写数据访问层的几种好方法(这里是catalog)。

例如,iBatis for .NET使用Fowler的Table Data Gateway模式。在iBatis中,您可以在XML中指定表数据网关对象。尽管您也可以执行多表操作,但每个网关通常会管理对一个SQL表的访问。网关由SQL语句组成,每个语句都包含一些XML。每个SELECT都返回一个或多个行对象,这些行对象只是属性集以及getter和setter方法(在.NET中,它们被称为POCO或PONO,Plain Old C#Objects或Plain Old .NET Objects。)。每个INSERT或UPDATE都以POCO作为输入。这看起来非常直观,而且不太难学。

答案 6 :(得分:1)

尝试创建最终,最好,最完美的DAL似乎有点疯狂 - 有许多不同的应用场景具有不同的竞争要求和需求我不相信任何人都能想出 THE ONE 终极DAL。

您需要查看一些现有的ORM工具,了解其中的一个或两个,了解它们的优势和可能的缺点,然后能够针对每种情况选择最佳的ORM工具。我怀疑它总是一样的.....

SubSonic非常适合规模较小,更灵活的项目 - 就像Linq-to-SQL一样,只要您使用SQL Server作为后端即可。如果你需要更多的企业能力,你应该看看NHibernate,ADO.NET实体框架,或者其他更大,更强大的玩家(这些玩家太复杂,不适合一个小而简单的场景)。

我认为没有 完美创建DAL的方法 - 了解可用的内容,学习如何选择最适合您当前需求的方法,而不是重塑自己 - 使用的是什么在那里可用!

马克

答案 7 :(得分:1)

答案 8 :(得分:1)

Linq to SQL是最佳解决方案,或者您可以尝试最简单的解决方案http://fluentado.codeplex.com/