对象模型怎么很多情况下与关系模型中的实体是完全一致的?

04-12-02 eway
在用hibernate进行o/r映射的时候遇到这样的问题:hibernate要求你把所有的表都生成类,然后,从域模型出发进行映射。

这引发了我得一个思考,似乎进行关系建模的时候,得出的实体(表),也都是来自与需求中的实体,而对象建模的得到的模型也是基于需求中的实体,二者似乎重合了,甚至可能一一对应!这让我十分的困惑哦。

eway
2004-12-02 10:52
如果说有区别是关系上和行为上的区别。数据库表没有业务的行为,没有继承;二者都有实体间的关系,只是表达方式不同(主外键和关联)。但是单就实体上去看,大部分情况,表与类是一一对应的,字段与属性也可是一一对应的?说不上哪里不妥,可就是觉得不舒服。

macher
2004-12-05 08:01
这叫数据库驱动设计,一般只有在比较小规模或简单的情形下适用

eway
2004-12-05 21:36
no,你没有理解我得意思。即使域模型驱动设计,也会遇到一样的问题。域模型反映的实体很可能与数据模型一一对应。不知你遇到否

eway
2004-12-05 21:54
或者说以上得问题可以归结为:数据建模得到得表是否通常反映业务实体?而对象建模得到得类通常也是对业务实体得反映?二者其实都是再对业务得分析中的来,两次的工作结果很多情况下也是对同一个实体的相似表达。只是对象建模往往包含了行为,另外就是对象建模与数据建模仅仅是在实体间关系的表达上存在不同方式。

ljshan
2004-12-06 10:44
我觉得数据模型关心的是如何通过ER来表达存储(静态性,当然E和R都是来自于业务领域),而对象模型关心的是业务对象之间的交互(动态性)关系,与存储无关。站的视角不一样而已,其实二者一致性越大,对系统的实现更加有利(就没有那么多impedance啦)。

eway
2004-12-06 12:41
所以系统分析的时候,需要两次对同样的业务进行两次分析,一次的侧重点是为了进行关系模型的表达(数据存储相关),另一次是为了对象模型表达(动态性相关);但是两次分析都有实体“关系”,几乎相同的属性字段。

虽然现在仍然是两次分析这样做的,可是突然想到:为什么里边有相同的或者近似的工作,我们做了2次?

Kidwish
2004-12-06 15:05
"或者说以上得问题可以归结为:数据建模得到得表是否通常反映业务实体?而对象建模得到得类通常也是对业务实体得反映?二者其实都是再对业务得分析中的来,两次的工作结果很多情况下也是对同一个实体的相似表达。只是对象建模往往包含了行为,另外就是对象建模与数据建模仅仅是在实体间关系的表达上存在不同方式。"

无论ER还是域模型和实体的对应关系都是通过各自的映射器来反映的(ER是通过关系模型的映射,而对象是通过关联,聚集等).当然得出的实体可以是同一个.对象建模的作用就是设计过程更OO而已,就其产生的实体和数据建模并没有什么两样.正因为如此,才可以"先建数据表,再映射到对象"的反工程.

ejb3
2004-12-06 17:07
大部分情况下确实是一致的

为什么一定要做两次分析呢,由对象模型直接生成关系模型不好吗

eway
2004-12-06 21:11
ejb3:一次分析?那么难免出现从关系模型向域模型推演或者从域模型向关系模型推演,呵呵,又要引发大争论了,如此。

猜你喜欢