ORM还是ROM
今天和公司另外一个项目组的同事交流Hibernate开发经验,发现他们使用Hibernate时用的是ROM,何谓ROM?
ROM就是先设计数据库表R,再映射成Hibernate pojo对象O。
本人认为Hibernate是ORM对象关系映射工具,那么当然是先设计pojo对象,然后再映射成数据库表,用来持久化。
这种现象实际反映了设计方法是面向关系的还是面向对象的,但是本人认为Hibernate主要只是为了将面向对象的领域对象进行关系数据库持久化的工具,所以ROM是对Hibernate的误用,ORM才能更好地发挥Hibernate的功能。
1 楼 aacc321 2009-07-14 但大部分公司,都是采用先表后对象的做法. 2 楼 onlysoymilk 2009-07-14 aacc321 写道但大部分公司,都是采用先表后对象的做法.
习惯问题,长久接触的都是从表映射成POJO,一时还些不习惯POJO到表的这种做法!
不过慢慢的会更倾向于ORM的! 3 楼 zhanghonglun 2009-07-14 onlysoymilk 写道aacc321 写道但大部分公司,都是采用先表后对象的做法.
习惯问题,长久接触的都是从表映射成POJO,一时还些不习惯POJO到表的这种做法!
不过慢慢的会更倾向于ORM的!
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。 4 楼 bighou 2009-07-15 引用onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。
两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。 5 楼 zhanghonglun 2009-07-15 bighou 写道引用onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。
两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。
是一边设计领域模型(设计类),一边设计数据库表,而这两个模型的基础都是领域模型(分析类中的实体类),再将类映射到表。这样恰恰可以将数据库模式和领域模型解耦。在数据库这边可以根据相关范式做重构,领域模型那边完全按照面向对象的方式组织类之间的关系,分配职责等。 6 楼 whaosoft 2009-07-15 我也有对象化设计表的 梦想~ 7 楼 bighou 2009-07-16 zhanghonglun 写道bighou 写道引用onlysoymilk 写道
类图是E-R 图的一个超集,所以我会选择先用面向对象的方式建立领域模型(分析类),然后两个分支并行的做数据库逻辑模型和领域模型的设计类。这样省去了数据库的概念模型。并且类图的表达能力要大于E-R 图,类图转换成表时也很多规则可以用的(跟概念模型转换为逻辑模型很像的),总之只要搞到满足特定的范式就OK 了。
这样也算ORM 了。
两个分支并行?是一边设计领域模型,一边设计数据库表吗?这样不是混淆了设计的方法,同时应用面向对象和面向关系,这样设计不是会在领域模型中混入了关系的模式,使领域模型不伦不类。导致领域模型失去了简单性和明确性,难以理解。
是一边设计领域模型(设计类),一边设计数据库表,而这两个模型的基础都是领域模型(分析类中的实体类),再将类映射到表。这样恰恰可以将数据库模式和领域模型解耦。在数据库这边可以根据相关范式做重构,领域模型那边完全按照面向对象的方式组织类之间的关系,分配职责等。
本人觉得在领域模型的设计类没有定义好以前或同时设计数据表,很难想象,因为在设计阶段实体类也会重构,甚至发生较大变化,领域模型是不断重构的,设计阶段也会经常发生迭代。所以应该在领域模型设计完(一次迭代完成时),在设计阶段后期设计实体类的数据表。过早的设计数据表,混淆了设计人员的领域概念,从而反过来可能引起对之前实体类的重构。