7

我目前正在组装一个相当简单的 ORM 工具,作为客户各种 Web 项目的框架。大多数项目都是内部的,不需要大量的并发性,所有项目都会与 SQL Server 相背离。我建议他们使用像 SubSonic、NHibernate 和其他一些开源项目这样的 ORM 工具,但是出于可维护性和灵活性的原因,他们希望创建一些自定义的东西。所以我的问题是:我应该确保在这个 ORM 工具中包含哪些功能?顺便说一句,我将使用 MyGeneration 来生成代码模板。

4

10 回答 10

23

为了所有神圣的人(以及妇女和儿童)的爱,尽一切可能说服他们不要使用定制的 O/RM 解决方案。当已经存在完美的开源轮子时,为什么人们想要重新发明轮子?!?!

于 2008-09-08T18:48:51.590 回答
5

如果您的客户因为(真实的或想象的)对支持的看法而对 OSS 不感兴趣,您是否考虑过任何顶级的商业第三方 ORM,例如LightSpeed,它带有一个不错的 GUI 设计器工具

光速 ORM
(来源:mindscape.co.nz

Mindscape(销售 LightSpeed 的公司)是一家位于我居住地附近的新西兰公司,我在那里遇到了一些开发人员,我知道他们以拥有令人难以置信的客户支持而闻名。当您购买软件时,它们会为您提供源代码,因此您可以随意调整它。

你可能不想推出自己的 ORM,除非你必须这样做并且你的客户愿意交出一大笔现金让你这样做。

于 2009-09-15T02:00:47.207 回答
4

IMO 编写自己的 OR/M 是您可能做出的最糟糕的设计决策之一。“可维护性和灵活性”正是不编写自己的 OR/M 的原因。

请阅读查看不编写自己的对象关系映射器的 25 个理由,看看您的客户是否真的愿意支付构建NHibernate(760 万美元)或SubSonic(150 万美元)之类的东西的成本。因为,就像上面 ChanChan 所说的,你最终会得到类似的东西。

于 2008-10-03T13:05:48.507 回答
2

Davy Brion(NHibernate 提交者)有很多帖子,由于某种原因,他还被迫为客户编写自定义 ORM。

他涵盖的一些内容是:

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

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

于 2009-09-15T04:25:41.383 回答
1

根据我的经验,您需要采用 nHibernate 样式并拥有它,以便您在对象和数据库之间拥有某种映射。这允许您的对象具有一些难以在数据库中表示但在 POCO 中更容易表示的东西。

Generation 通过为您提供符合您的模式的类来帮助您开始,但是如果您打算维护任何东西或测试任何东西,那么映射现在是痛苦的,以后会很高兴。

Subsonic 是一个很棒的模型,它的开源,如果你必须去生成,使用他们在 myGeneration 中的模板来获得优势。

顺便说一句:我已经完成了你正在做的事情,我最终得到了与亚音速非常相似的东西,现在建议我的客户使用亚音速源,并为他们自己分叉。

于 2008-09-08T18:40:49.053 回答
1

也许只是也许,您急需一些现有解决方案中尚不存在的“功能”。也许您还需要更简单的东西。亚音速的 1.5 美元简直太离谱了。也许你想使用 POCO。也许您想在 3 层场景中轻松使用这些东西。也许您不想支持地球上的所有 RDBMS,因此您可以为您的目标硬编码和优化代码。也许您想实现更智能的对象跟踪。可能现有 orms 做出的一些设计决策会让你发疯......

我自己正在使用我自己和我自己开发的自定义 orm,我很满意我做到了。地毯下没有隐藏的龙,没有惊喜的场景。我的 orm 完全符合我的要求,仅此而已。

于 2009-01-01T17:54:54.200 回答
1
  • 二级缓存

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

    • 自动脏检查

      允许您在不加载对象的情况下更新对象的更改。

    • 强大的查询语言

    • 强大的级联操作

    • 强大的主键生成器策略

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

    • 支持复合元素

    • 对活动的支持

      onSave、onUpdate 等

    • 良好的文档和参考书

    • 支持会话状态

问候,

于 2009-09-15T04:47:40.137 回答
0

您作为顾问的工作(听起来就是这样)是利用您的专业知识为您的客户实施符合他们需求的解决方案,同时以最少的成本和时间投资。

如果他们想建造和销售 OR/M。去城里做一个。如果他们想要其他任何东西,请使用已经存在的来完成工作。

如果他们坚持花钱,就买一个现有的(我不会点名,但有一些不错的不是免费的)。

于 2009-09-15T04:36:11.550 回答
0

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

于 2010-10-18T16:14:18.443 回答
0

还没有人提到它;但是选择LLBLGen。您可以根据需要自定义模板,当然,您也可以在生成的类中编写自己的自定义代码。买它。你永远不会回头,你会说“谢谢你丝滑!” 当它始终如一地工作时。(我没有写,但我喜欢它)。如果它不适合你,你也可以说“该死的丝滑!”。但这不太可能,但我确实提供了它作为一种选择。

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

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

于 2009-09-15T02:04:58.107 回答