ORM是否会对OO设计起反作用?

J.C*_*.C. 14 oop orm behavior

在OOD中,对象的设计被称为以其身份和行为为特征.

在过去使用ORM之后,我认为主要目的是围绕存储/检索数据的能力.也就是说,ORM对象不是按行为设计的,而是数据(即数据库表).案例和要点:许多ORM工具都带有一个点到数据库表和点击对象生成器.

如果对象不再以行为为特征,那么在我看来,这将使对象的身份和责任变得混乱.随后,如果对象没有由责任定义,这可以帮助实现紧密耦合的类和整体糟糕的设计.

此外,我认为在应用程序设置中,您将面临可扩展性问题.

所以,我的问题是,你认为ORM会对OO设计起反作用吗?或许潜在的问题是它们是否会对应用程序开发起反作用.

Gre*_*ley 10

在良好的数据库设计要求和良好的OO设计要求之间存在众所周知且经常忽略的阻抗不匹配.大多数开发人员(根据我的经验)或者不理解这种阻抗不匹配或者不关心.因为从数据库开始并从中生成对象(而不是反过来)更常见,所以是的,你最终会得到很好的对象,这些对象很好地作为持久层,但从OO角度看是次优的.(相反,从对象模型生成数据库,让我想要刺出我的眼睛.)

为什么它们从面向对象的角度来看是次优的?因为ORM生成的对象不是业务对象,即使是部分类等也是如此.业务对象模型行为.ORM对象建模持久性.我不打算用十段来论证这种区别.这是Rocky Lhotka在他关于Business Objects和他的CSLA框架的书中所涵盖的内容.无论你是否喜欢或使用CSLA,我认为他的论点是坚实的.

  • @Gregory Higley - 我想你就是这个.我对Rocky Lhotka非常熟悉,我认为他有一些非常好的观点.如果你把Martin Fowler扔进混合体中,我认为ORM的初始开销成本很低,但是你会留下复杂的域逻辑,然后维护更高的成本.这就是问题,我的假设来源于此.换句话说,由行为(由适当的OOD表征)而不是数据设计的对象将提供良好的OO设计.而从数据中获得的对象将否定正确OOD的一些好处. (2认同)