制作 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 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue 中制作表格的最佳方法是啥?

使用算法制作动画 GIF 的最佳方法是啥?

制作 Android TV 菜单的最佳方法是啥?

在 .net 中制作单实例应用程序的最佳方法是啥? [复制]

在 Node js 中制作简单视频 API 的最佳方法是啥?

制作基于票的抽奖机器人的最佳方法是啥[关闭]