代码之家  ›  专栏  ›  技术社区  ›  Wahid Bitar

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

  •  4
  • Wahid Bitar  · 技术社区  · 16 年前

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

    我在网上搜索了一些样本,但我不知道哪种方法是最好的。

    是这样吗? [Attributes] ?或使用 <Generics> 或者别的什么?

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

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

    9 回复  |  直到 13 年前
        1
  •  6
  •   Filip De Vos    13 年前

    最佳方法是:

    别自己动手 除非是学术研究项目或你打算建立一个商业航运形式。

    首先尝试几十个现有的ORM解决方案。(实体框架、亚音速、NHibernate等…)。他们都有自己的怪癖和局限性,其中夹杂着无数令人敬畏的东西。

    变形金刚是难以置信的难以得到正确的和一个巨大的事业。

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

        2
  •  10
  •   Craig    16 年前

    只要确保你:

    • 始终使用存储过程
    • 从不使用存储过程
    • 有时使用存储过程
    • 使用NHiBiNATE
    • 使用亚音速
    • 使用实体框架
    • 自己写
    • 从不写自己的
    • 使用POCO
    • 使用ActiveRecord
    • 使用知识库
    • 总是照福勒说的做
    • 不要做福勒说的事
    • 不要用linq-to-sql,它已经死了
    • 使用linq-to-sql,它不会再死了

    这样做你就没事了。

        3
  •  5
  •   Canavar    16 年前
        4
  •  4
  •   TheVillageIdiot    16 年前

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

        5
  •  1
  •   Juri    16 年前

    正如前面提到的,不要试图自己实现ORM工具,它们有很多是免费提供的。但是DAL不是ORM工具,ORM工具将在DAL中使用。DAL只是为了从应用程序的其余部分隐藏数据访问逻辑,以便获得更可维护的解决方案。最后,您还可以使用普通的SQL语句i.您的DAO类。在创建DAL时,您应该注意的是尽可能将其与应用程序/其他层的其余部分分离。这可以通过对接口进行编码和使用依赖注入来实现。Spring在这里是非常有用的(给你Java程序)。除此之外,建造这样一个层并没有什么大的魔力。

        6
  •  1
  •   marc_s MisterSmith    16 年前

    尝试创建ulimate,best,perfect dal似乎有点疯狂——有太多不同的应用场景,有着不同和竞争的需求和需求,我不相信有人能想到 一个 最终DAL。

    您需要检查一些现有的ORM工具,了解其中一个或两个工具,了解它们的优点和可能的缺点,然后能够为每个给定的情况选择最好的工具。我怀疑它会永远不变……

    SubSonic非常适合较小、更灵活的项目——就像Linq to SQL一样,只要您使用SQL Server作为后端。如果您需要更多的企业能力,您应该看看nhibernate、ado.net实体框架或其他更大、更强大的参与者(它们太复杂,不适合于小型、简单的场景)。

    我觉得没有 这个 创建DAL的完美方法-了解可用的内容,学习如何选择最适合您当前需求的内容,而不是重塑自己-使用现有的内容!

    马克

        7
  •  1
  •   Syed Tayyab Ali    16 年前
        8
  •  1
  •   Jim Ferrans    16 年前

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

    我在使用 iBatis SQL映射器,很多人喜欢 Hibernate 对于ORM(尽管有学习曲线)。

    Martin Fowler描述了在 Patterns of Enterprise Application Architecture (这里有一个 catalog )

    例如,.NET的iBATIS使用Fowler的 Table Data Gateway 模式。在iBATIS中,您可以用XML指定表数据网关对象。每个网关通常控制对一个SQL表的访问,尽管您也可以执行多表操作。网关由SQL语句组成,每个语句都用一点XML包装。每个select都返回一个或多个row对象,这些对象只是一组属性加上getter和setter方法(在.NET中,这些方法称为poco或pono、普通的旧c对象或普通的旧.NET对象)。每个插入或更新都将一个POCO作为输入。这看起来很直观,不难学。

        9
  •  1
  •   pedrofernandes    16 年前

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