制作 DAL 的最佳方法是啥?
Posted
技术标签:
【中文标题】制作 DAL 的最佳方法是啥?【英文标题】:What is the best approach to make DAL?制作 DAL 的最佳方法是什么? 【发布时间】:2010-11-02 16:36:14 【问题描述】:我想制作一个完美的自定义 DAL(数据抽象层)类,用于我的所有项目。
我已经在互联网上搜索并找到了一些示例,但我不知道哪种方法是最好的。
是做[Attributes]
吗?还是使用<Generics>
或别的什么?
所以请给我一个标题,我会从那里继续。
再次感谢并原谅我的语言。
【问题讨论】:
【参考方案1】:只要确保你:
始终使用存储过程 永远不要使用存储过程 有时使用存储过程 使用 nHibernate 使用亚音速 使用实体框架 自己写 永远不要自己写 使用 POCO 使用 ActiveRecord 使用 IRepository 始终按照 Fowler 所说的去做 永远不要照 Fowler 说的做 不要使用 Linq to SQL,它已经死了 使用 Linq to SQL,它不再死了做这一切,你会没事的。
【讨论】:
这听起来像是向东和向西。不是吗(:(:【参考方案2】:最好的方法是:
不要自己做,除非是为了学术研究项目,或者您打算建立一个运送 ORM 的企业。
首先试用数十种现有的 ORM 解决方案。 (实体框架、亚音速、休眠等...)。他们都有自己的怪癖和局限性,还有很多令人敬畏的东西。
ORM 很难做到正确,而且是一项艰巨的任务。
有点相关和钱:http://wekeroad.com/2009/06/11/youre-not-your-data-access/
【讨论】:
Wahid 询问如何构建他的持久层(数据抽象层),而不是询问如何编写 ORM。 也许,还不清楚……尽管如此,他可以使用的结构取决于他将使用的 ORM。许多 ORM 不支持 POCO 持久性,一些 ORM 像 Rails 活动记录(或 LINQ to SQL)规定了某些结构。这一切都取决于,无论如何几乎没有“最好”的方式。如果您想要一个好的架构概念,请阅读存储库模式。 geekswithblogs.net/gyoung/archive/2006/05/03/77171.aspx【参考方案3】:我可以建议你先阅读this article。看看EnterPrise Library's Data Access Application Block。
【讨论】:
【参考方案4】:如果您是初学者,我建议您使用SubSonic(如果您从事网络开发,则更是如此)。
【讨论】:
【参考方案5】:如前所述,不要尝试自己实现 ORM 工具,其中有很多免费提供。但是 DAL 不是 ORM 工具,ORM 工具将在您的 DAL 中使用。 DAL 只是为了让你的应用程序的其余部分隐藏数据访问逻辑,以便获得更易于维护的解决方案。最后你也可以有正常的 SQL 语句 i。你的 DAO 课程。创建 DAL 时应注意的是尽可能将其与应用程序/其他层的其余部分解耦。这可以通过针对接口进行编码和使用依赖注入来实现。 Spring 在这里提供了很大的帮助(假设您使用 Java 编程)。除此之外,构建这样一个层并没有什么大不了的。
【讨论】:
【参考方案6】:试图创建终极、最好、完美的 DAL 似乎有点疯狂 - 有这么多不同的应用场景,具有不同且相互竞争的要求和需求,我不相信任何人都能想出 THE ONE 终极 DAL。
您需要查看一些现有的 ORM 工具,了解其中的一两个工具,了解它们的优势和可能存在的缺点,然后才能针对每种特定情况选择最好的工具。我怀疑它会永远是一样的.....
SubSonic 非常适合更小、更灵活的项目 - 只要您使用 SQL Server 作为后端,Linq-to-SQL 也是如此。如果你需要更多的企业能力,你应该看看 NHibernate、ADO.NET Entity Framework 或其他更大、更有能力的播放器(它们太复杂了,不适合小而简单的场景)。
我认为没有创建 DAL 的THE完美方法 - 了解可用的内容,学习如何选择最适合您当前需求的方法,并且不要重新改造自己 - 使用现有的有货!
马克
【讨论】:
【参考方案7】:请阅读Data Access Layer Design Considerations
【讨论】:
【参考方案8】:绝对不要编写自己的持久性管理器。如果您想从类结构开始并让 ORM 为您生成 SQL 表结构,则应该使用 Object-Relational Mapper (ORM),或者使用 SQL Mapper 如果您想从 SQL 表开始并希望您的类代表表行。
我在使用iBatis SQL Mapper 方面拥有丰富的经验,很多人都喜欢Hibernate 用于 ORM(尽管有一个学习曲线)。
Martin Fowler 在Patterns of Enterprise Application Architecture(这里是catalog)中描述了几种编写数据访问层的好方法。
例如,用于 .NET 的 iBatis 使用 Fowler 的 Table Data Gateway 模式。在 iBatis 中,您可以在 XML 中指定 Table Data Gateway 对象。每个网关通常控制对一个 SQL 表的访问,尽管您也可以执行多表操作。网关由 SQL 语句组成,每个语句都包装在一些 XML 中。每个 SELECT 返回一个或多个行对象,这些对象只是一组属性加上 getter 和 setter 方法(在 .NET 中,这些对象称为 POCO 或 PONO、Plain Old C# Objects 或 Plain Old .NET Objects。)。每个 INSERT 或 UPDATE 都将 POCO 作为其输入。这看起来很直观,也不难学。
【讨论】:
【参考方案9】:Linq to SQL 是最好的解决方案,或者您可以尝试最简单的解决方案http://fluentado.codeplex.com/
【讨论】:
以上是关于制作 DAL 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 .net 中制作单实例应用程序的最佳方法是啥? [复制]