哪些ORM支持哪种工作流样式

时间:2011-06-24 22:01:07

标签: orm

我使用了几种不同语言的几种不同的ORM - 似乎没有就什么样的 thingy 应该是源,以及应该生成什么达成一致。

考虑这些 thingies

  • 实体:一个普通的旧物体。确实如此 东西。
  • Mapper:创建的对象 来自数据库的实体,或持久化它 背部。
  • 表:数据库表。
  • 型号: 描述一个单独的模型 抽象 thingy
  • 接线:A 描述如何部分 表和实体是相关的。

这为我们提供了这些工作流程样式:

  • 模型驱动:编写模型,生成实体,映射器和表。
  • 实体驱动:您编写一个类,并生成映射器和表。
  • 表驱动:您创建一个表,并生成实体和映射器。
  • 连线:您编写了Class,Table和Wiring,生成了Mapper。

问题:

  • 还有其他一种我没注意到的风格吗?
  • 哪些ORM支持哪些样式?
  • 这是否有标准词汇? (我刚刚编写了上述内容。)

3 个答案:

答案 0 :(得分:2)

从我到目前为止看到的,使用.NET,Entity Framework支持上述所有内容,NHibernate支持你所谓的模型驱动,实体驱动和连线(不使用额外的第三方库)。

NHibernate是Java的Hibernate的一个端口,所以我认为它们支持相同的流程。

答案 1 :(得分:1)

我道歉,如果这可能有点偏离主题,但它太大而不适合作为评论,所以提前警告,如果其他人不认为它有助于我将删除它的主题。

一个关键问题是您和您的应用程序是否拥有,并且是唯一的客户,它可以加入数据库。

如果您需要解决现有数据库,那么从模块中生成数据库可能是不可能的。

如果由您的系统创建,它将被其他系统访问(这意味着您不能随意更改数据库以实现逻辑,甚至更极端,可能会添加其他字段/表以促进第3个派对应用程序),那么您需要考虑哪些工作流将允许您从实现中抽象出数据库详细信息,以防止您必须进行重大的重写。

这些要求可能会在整个项目生命周期中发生变化,因为您可能从唯一的消费者开始,将来其他应用程序可能会直接访问同一个数据库。这可能是您在调用它时具有“基于实体”工作流程的位置,其中您有一个表示实际数据库表的图层,并且表示您系统中使用的数据的模型将从这些更改中抽象出来。

有时需要改变,因此您使用的ORM和工作流程应该注意并且至少部分能够在未来可能无法生存的情况下生存。想象一下企业(又称政治)环境。有一天,DBA出现并说,“所有数据访问现在都通过SPROC”。这些类型的情况会促使您按照所谓的“映射”。

答案 2 :(得分:0)

流行的活动记录模式没有完整的布线和映射复杂性。模型类直接使用持久性和域方法混合的方法实现行记录。

在Ruby on Rails的ActiveRecord库中,类本身也充当表的模型,使用find()等的类方法。因此,您通常只为每个表编写一个类。

Ruby AR动态地反映了表(对于表名,列名和类型),因此在以某种方式创建数据库模式后,以下内容就足够了:

class MyTable << ActiveRecord::Base; end

row = MyTable.find(7)
row.my_column1 = "foo"
row.save()

http://ar.rubyonrails.org/