【发布时间】:2010-11-02 16:36:14
【问题描述】:
我想制作一个完美的自定义 DAL(数据抽象层)类,用于我的所有项目。
我已经在互联网上搜索并找到了一些示例,但我不知道哪种方法是最好的。
是做[Attributes]吗?还是使用<Generics> 或别的什么?
所以请给我一个标题,我会从那里继续。
再次感谢并原谅我的语言。
【问题讨论】:
标签: c# .net asp.net data-access-layer
我想制作一个完美的自定义 DAL(数据抽象层)类,用于我的所有项目。
我已经在互联网上搜索并找到了一些示例,但我不知道哪种方法是最好的。
是做[Attributes]吗?还是使用<Generics> 或别的什么?
所以请给我一个标题,我会从那里继续。
再次感谢并原谅我的语言。
【问题讨论】:
标签: c# .net asp.net data-access-layer
只要确保你:
做这一切,你会没事的。
【讨论】:
最好的方法是:
不要自己做,除非是为了学术研究项目,或者您打算建立一个运送 ORM 的企业。
首先试用数十种现有的 ORM 解决方案。 (实体框架、亚音速、休眠等...)。他们都有自己的怪癖和局限性,还有很多令人敬畏的东西。
ORM 很难做到正确,而且是一项艰巨的任务。
有点相关和钱:http://wekeroad.com/2009/06/11/youre-not-your-data-access/
【讨论】:
【讨论】:
如果您是初学者,我建议您使用SubSonic(如果您从事网络开发,则更是如此)。
【讨论】:
如前所述,不要尝试自己实现 ORM 工具,其中有很多免费提供。但是 DAL 不是 ORM 工具,ORM 工具将在您的 DAL 中使用。 DAL 只是为了让你的应用程序的其余部分隐藏数据访问逻辑,以便获得更易于维护的解决方案。最后你也可以有正常的 SQL 语句 i。你的 DAO 课程。创建 DAL 时应注意的是尽可能将其与应用程序/其他层的其余部分解耦。这可以通过针对接口进行编码和使用依赖注入来实现。 Spring 在这里提供了很大的帮助(假设您使用 Java 编程)。除此之外,构建这样一个层并没有什么大不了的。
【讨论】:
试图创建终极、最好、完美的 DAL 似乎有点疯狂 - 有这么多不同的应用场景,具有不同且相互竞争的要求和需求,我不相信任何人都能想出 THE ONE 终极 DAL。
您需要查看一些现有的 ORM 工具,了解其中的一两个工具,了解它们的优势和可能存在的缺点,然后才能针对每种特定情况选择最好的工具。我怀疑它会永远是一样的.....
SubSonic 非常适合更小、更灵活的项目 - 只要您使用 SQL Server 作为后端,Linq-to-SQL 也是如此。如果你需要更多的企业能力,你应该看看 NHibernate、ADO.NET Entity Framework 或其他更大、更有能力的播放器(它们太复杂了,不适合小而简单的场景)。
我认为没有创建 DAL 的THE完美方法 - 了解可用的内容,学习如何选择最适合您当前需求的方法,并且不要重新改造自己 - 使用现有的有货!
马克
【讨论】:
绝对不要编写自己的持久性管理器。如果您想从类结构开始并让 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 作为其输入。这看起来很直观,也不难学。
【讨论】:
Linq to SQL 是最好的解决方案,或者您可以尝试最简单的解决方案http://fluentado.codeplex.com/
【讨论】: