【问题标题】:What is the best approach to make DAL?制作 DAL 的最佳方法是什么?
【发布时间】:2010-11-02 16:36:14
【问题描述】:

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

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

是做[Attributes]吗?还是使用<Generics> 或别的什么?

所以请给我一个标题,我会从那里继续。

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

【问题讨论】:

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


    【解决方案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】:

    【讨论】:

      【解决方案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】:

            【讨论】:

              【解决方案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/

                【讨论】:

                  猜你喜欢
                  • 2013-05-25
                  • 2023-03-28
                  • 2017-04-27
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-09-22
                  • 2020-01-16
                  相关资源
                  最近更新 更多