`
bighou
  • 浏览: 13530 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

ORM还是ROM

    博客分类:
  • DDD
阅读更多
   今天和公司另外一个项目组的同事交流Hibernate开发经验,发现他们使用Hibernate时用的是ROM,何谓ROM?
    ROM就是先设计数据库表R,再映射成Hibernate pojo对象O。
    本人认为Hibernate是ORM对象关系映射工具,那么当然是先设计pojo对象,然后再映射成数据库表,用来持久化。
    这种现象实际反映了设计方法是面向关系的还是面向对象的,但是本人认为Hibernate主要只是为了将面向对象的领域对象进行关系数据库持久化的工具,所以ROM是对Hibernate的误用,ORM才能更好地发挥Hibernate的功能。

   
4
2
分享到:
评论
7 楼 bighou 2009-07-16  
zhanghonglun 写道
bighou 写道
引用
onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。

两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。

是一边设计领域模型(设计类),一边设计数据库表,而这两个模型的基础都是领域模型(分析类中的实体类),再将类映射到表。这样恰恰可以将数据库模式和领域模型解耦。在数据库这边可以根据相关范式做重构,领域模型那边完全按照面向对象的方式组织类之间的关系,分配职责等。

本人觉得在领域模型的设计类没有定义好以前或同时设计数据表,很难想象,因为在设计阶段实体类也会重构,甚至发生较大变化,领域模型是不断重构的,设计阶段也会经常发生迭代。所以应该在领域模型设计完(一次迭代完成时),在设计阶段后期设计实体类的数据表。过早的设计数据表,混淆了设计人员的领域概念,从而反过来可能引起对之前实体类的重构。
6 楼 whaosoft 2009-07-15  
我也有对象化设计表的 梦想~
5 楼 zhanghonglun 2009-07-15  
bighou 写道
引用
onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。

两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。

是一边设计领域模型(设计类),一边设计数据库表,而这两个模型的基础都是领域模型(分析类中的实体类),再将类映射到表。这样恰恰可以将数据库模式和领域模型解耦。在数据库这边可以根据相关范式做重构,领域模型那边完全按照面向对象的方式组织类之间的关系,分配职责等。
4 楼 bighou 2009-07-15  
引用
onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。

两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。
3 楼 zhanghonglun 2009-07-14  
onlysoymilk 写道
aacc321 写道
但大部分公司,都是采用先表后对象的做法.

习惯问题,长久接触的都是从表映射成POJO,一时还些不习惯POJO到表的这种做法!
不过慢慢的会更倾向于ORM的!

类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。
2 楼 onlysoymilk 2009-07-14  
aacc321 写道
但大部分公司,都是采用先表后对象的做法.

习惯问题,长久接触的都是从表映射成POJO,一时还些不习惯POJO到表的这种做法!
不过慢慢的会更倾向于ORM的!
1 楼 aacc321 2009-07-14  
但大部分公司,都是采用先表后对象的做法.

相关推荐

Global site tag (gtag.js) - Google Analytics