这两种建立关联关系的方式有啥区别?

10-12-31 lostalien
我们公司用的开发框架是S2SH,我发现这么个问题,比如用户类对公司类是一对一关系,那么:

方式一:

class User{

Company comp;

}

方式二:

class User{

int companyId;

}

我们项目经理用的是方式二,可我觉得方式一才是对的。。。我想跟他说说,但是又发现我没有足够的理由说服他,我好像接触hibernate的时候,就是按照方式一这么来弄的。。。。

大家说说哪种方式是对的啊。。。。。

PS: 我觉得先建表,在弄类,好像就容易写成方式二。。。

banq
2011-01-01 11:30
第一种。这是正确的表达对象关联关系。一个对象引用另外一个对象。

后面一种是数据的表达方式,非对象关系。

想象一下,一个窗户里面有两块玻璃,是窗户对象里面包含玻璃的ID标记,还是包含玻璃这个完整对象呢?

大道自然。

lostalien
2011-01-04 08:41
好的,谢谢~~

yujw
2011-01-04 16:03
说的那么抽象干吗?

yujw
2011-01-04 16:06
当你们的项目采用充血的对象模型时可以用第一种方式,当你们的项目采用贫血的对象模型时,把所有的业务都写在了service里,那你就可以采用第二种方式。

SpeedVan
2011-01-06 00:17
这是你先建表的原因,呵呵,别被数据库约束自己~~~

我理解和banq有点出入,如下:

第一种是 实体的正确表达,内聚是实体的完整表达方式。注意:是指实体。

第二种是 实体关系的表达方式,如订单,订单和人应该各自独立,谁也不是谁的组成部分,这时候就需要关联起来,如下单人帐号(或者其ID)。

从上面可以看出,写法取决于你自己所需要的是实体还是实体间关系(并非内聚关系),一家观点而已,希望对你有用,呵呵

boringlife
2011-01-07 18:22
在心里自己问自己100遍, 面向对象是啥, 面向对象是什么, 面向对象是what。这么一折腾我感觉你应该会更加坚信自己选择方式一的理由。

领域, 我们一直在强调领域, 这代表了我们的业务。 业务抽象出来的模型, 可以叫做领域模型。业务想要流转, 模型之间的互动少不了。这种互动可以直接映射成为系统运行的过程中对象与对象之间的互动。在领域驱动这种思维的大前提下, 使用1是最符合概念的。

说服经理的最好办法就是让他看官方文档, 下载下来的hibernate自带的就行。

猜你喜欢