我希望创建一个完美的自定义 DAL(数据抽象层)类,以便在所有项目中使用。
我已经在互联网上搜索到了一些示例,但我从未知道哪种方法是最好的。
是制作 [Attributes]
?还是使用 <Generics>
或其他方法?
因此,请给我一个标题,然后我会从那里开始。
再次感谢,不要介意我的语言表达。
我希望创建一个完美的自定义 DAL(数据抽象层)类,以便在所有项目中使用。
我已经在互联网上搜索到了一些示例,但我从未知道哪种方法是最好的。
是制作 [Attributes]
?还是使用 <Generics>
或其他方法?
因此,请给我一个标题,然后我会从那里开始。
再次感谢,不要介意我的语言表达。
请确保:
只要做到这些,你就没问题了。
最好的方法是:
除非你是在进行学术研究项目或者打算创建一个ORM的业务,否则不要自己动手。
首先尝试使用现有的数十种ORM解决方案。(Entity framework、subsonic、nhibernate等等...)。它们都有各自的怪癖和限制,同时也混合了大量的优秀特性。
ORM非常难以正确实现,需要付出巨大的努力。
略微相关并且很到位:http://wekeroad.com/2009/06/11/youre-not-your-data-access/
正如其他人所提到的,不要试图自己实现ORM工具,因为有很多免费的工具可用。但是DAL并不是ORM工具,ORM工具将在您的DAL中使用。 DAL仅用于隐藏数据访问逻辑,以便在最终您的应用程序中拥有更易于维护的解决方案。最终,您还可以在DAO类中使用普通的SQL语句。创建DAL时需要注意的是尽可能将其与应用程序/其他层分离。这可以通过针对接口编码和使用依赖注入来实现。Spring在这里非常有帮助(如果您使用Java编程)。除此之外,构建这样的层并没有太大的魔法。
绝对不要编写自己的持久性管理器。如果您想从类结构开始,并希望ORM为您生成SQL表结构,则应使用对象关系映射器(ORM),或者如果您想从SQL表开始,并且希望您的类表示表行,则应使用SQL Mapper。
我使用iBatis SQL Mapper有很好的经验,很多人喜欢Hibernate作为ORM(虽然有一定的学习曲线)。
Martin Fowler在《企业应用架构模式》中描述了编写数据访问层的几种好方法(这是一个目录)。
例如,iBatis for .NET 使用 Fowler 的Table Data Gateway模式。在 iBatis 中,您可以在 XML 中指定 Table Data Gateway 对象。每个 Gateway 通常管理对一个 SQL 表的访问,尽管您也可以执行多表操作。Gateway 由 SQL 语句组成,每个语句都包装在一小段 XML 中。每个 SELECT 返回一个或多个行对象,这些对象只是属性集加上 getter 和 setter 方法(在 .NET 中称为 POCOs 或 PONOs,即 Plain Old C# Objects 或 Plain Old .NET Objects)。每个 INSERT 或 UPDATE 都以 POCO 作为其输入。这似乎相当直观,而且不太难学。试图创建终极、最佳、完美的数据访问层似乎有点疯狂——因为有太多不同的应用场景,有不同和竞争的要求和需求,我不相信任何人能想出“唯一”的终极数据访问层。
你需要查看一些现有的ORM工具,了解其中一两个,知道它们的优点和可能的缺点,然后能够为每种情况选择最好的一个。我怀疑它不会总是相同的......
SubSonic非常适合较小、更灵活的项目——Linq-to-SQL也是如此,只要你使用SQL Server作为后端。如果你需要更强大的企业级功能,你应该看看NHibernate、ADO.NET Entity Framework或其他更大、更有能力的玩家(这些玩家对于小而简单的场景来说过于复杂,不适合)。
我不认为有“完美”的创建数据访问层的方法——学习可用的内容,学会如何选择最适合当前需求的内容,不要重复造轮子——使用已经存在的东西!
Marc