一个ORM需要具备哪些好的特性?

7

我目前正在开发一个相当简单的ORM工具,作为客户各种Web项目的框架。其中大部分项目是内部项目,并不需要大量并发,并且所有项目都将使用SQL Server。我建议他们选择SubSonic、NHibernate和其他一些开源项目等ORM工具,但出于可维护性和灵活性的考虑,他们想要创建一些自定义内容。所以我的问题是:我应该确保在这个ORM工具中包含哪些功能呢?顺便说一句,我将使用MyGeneration来生成代码模板。


1
客户其实不需要关心使用了哪种ORM,而是要让他们相信,在实施开源技术/第三方库(jQuery、企业库等)时,他们将更快地将产品/服务推向市场。 - Kane
NHibernate比这里的一位顾问为我们的一个项目构建的自制ORM更易于维护和更灵活。 - JasonTrue
10个回答

23

为了上帝的爱(和妇女、孩子们的安全),请尽一切可能说服他们不要选择自定义的对象关系映射(O/RM)解决方案。为什么人们想要重新发明轮子,当已经存在完美好用的开源轮子?!?


嗯,我完全同意...我非常喜欢SubSonic和NHibernate,但在这种情况下,我认为客户几乎总是会反对。 - JC Grubbs

5
如果您的客户因为对支持的(真实或想象中的)印象而不感兴趣开源软件,那么您是否考虑过一些高质量的商业第三方ORM,例如配有漂亮GUI设计工具的LightSpeedLightSpeed ORM
(来源:mindscape.co.nz) Mindscape(销售LightSpeed的公司)是一家位于我所在附近的新西兰公司,我曾经见过一些开发人员,并且我知道他们以提供令人难以置信的客户支持而闻名。购买该软件时还会提供源代码,因此您可以按照自己的喜好进行调整。

除非必须这样做且您的客户愿意支付巨额费用,否则您可能不想自己开发ORM。


4

在IT技术领域,自己编写ORM(对象关系映射)是最糟糕的设计决策之一。正是因为“可维护性和灵活性”,才不应该编写自己的ORM。

请阅读《25 Reasons Not To Write Your Own Object Relational Mapper》,看看您的客户是否真的想支付像NHibernate(760万美元)或SubSonic(150万美元)这样的成本。因为,就像上面的ChanChan所说,你最终会得到类似的结果。


2

有一些由Davy Brion(NHibernate的提交者)发布的帖子,他不知为何也被迫为客户编写自定义ORM。

他涵盖的一些内容包括:

  • 将类映射到表
  • 开箱即用的CRUD功能
  • 填充实体
  • 会话级缓存
  • 执行自定义查询

如果您必须走这条路,那么绝对值得一看:创建自己的数据访问层系列


1
也许你非常需要一些现有解决方案中还不存在的“功能”。也许你需要更简单的东西。Subsonic的1.5美元价格实在是太离谱了。 也许你想使用POCO。也许你想在三层场景中轻松使用这些东西。 也许你不想支持地球上所有的RDBMS,所以你可以为目标硬编码和优化代码。也许你想实现更智能的对象跟踪。也许现有ORM的某些设计决策让你发疯...
我自己正在使用我自己开发的自定义ORM,并且我很满意我所做的事情。没有任何隐藏的问题,没有任何意外情况。我的ORM正好做我想要它做的事情,没有多余的,也没有少的。

1
  • 二级缓存

    允许您在内存中维护实体实例。

    • 自动脏检查

      允许您更新对象中的更改而不加载它。

    • 强大的查询语言

    • 强大的级联操作

    • 强大的主键生成策略

      ORM框架将根据目标数据库选择最佳的主键生成策略

    • 支持复合元素

    • 支持事件

      onSave、onUpdate等

    • 良好的文档和参考书籍

    • 支持会话状态

此致敬礼


1

根据我的经验,你需要采用nHibernate风格,并建立对象和数据库之间的映射关系。这样可以让你的对象拥有一些在数据库中难以表示但在POCOs中更容易表示的东西。

生成代码可以帮助你入门,提供符合模式的类,但如果你计划维护或测试任何东西,映射就是现在的痛苦,未来的快乐。

Subsonic是一个很好的模型,而且它是开源的,如果你必须使用生成代码,请使用myGeneration中的它们的模板来获得优势。

顺便说一句:我已经做过你正在做的事情,最终得到了与subsonic非常相似的东西,现在我建议我的客户获取subsonic源代码,并为自己创建分支。


0
尝试使用Devart LinqConnect - 它具备所有LINQ to SQL功能和对最流行的数据库服务器(Oracle、MySQL、Postgre、SQL Server和SQLite)的广泛支持。令人难以置信的可视化建模工具,先进的监控工具,高质量的支持 - 在我的项目执行期间,我只用了三周时间就学会了它。

0

还没有人提到它,但是选择LLBLGen。您可以根据自己的喜好自定义模板,并且显然可以在生成的类中编写自己的自定义代码。购买它。当它始终完美地工作时,您永远不会回头,并且会说“谢谢你,丝滑!”(我没有写它,但我喜欢它)。如果它对您不起作用,您也可以说“该死的,丝滑!”但这不太可能发生,尽管我提供这个选项。

我注意到关于LLBLGen唯一的坏事是支持动态切换数据库/服务器的功能。它不支持我想要的一个功能,即能够检测您检索的给定实体在您切换到的新数据库中是否“存在”。但这是一个罕见的情况。

我建议使用LLBLGen,因为当我遇到它时,我正在编写自己的OR/M。从此我就再也没有回头过。


0

作为一名顾问(听起来你就是这样的),你的工作是利用你在实施方面的专业知识,以最小的成本和时间投资为客户提供一个符合他们需求的解决方案。

如果他们想要构建并销售一个OR/M,那就去制作一个。如果他们想要其他任何东西,使用已经存在的工具来完成任务。

如果他们坚持要花钱,那就购买一个现有的(我不会透露任何名称,但有一些不免费的好工具可供选择)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接