域对象行为如何

时间:2011-08-16 14:11:43

标签: java object dns

这是一个来自新手的相当愚蠢但非常有效的问题。 上下文:我的“域对象”有一个名称(以及其他一些属性,但它们并不重要)。此名称是根据数据库中定义的某些模式生成的。 现在......谁应该确定域对象的名称?域对象应该确定它自己的名称(请注意这个“名称”可以基于它自己或其他对象的属性),或者服务是否应该根据模式确定名称然后调用类似

的内容
domainObject.setName(theActualName)

我倾向于遵循“服务”方法,但另一方面,似乎这个任务应该是特定于对象的行为。

非常感谢您的回复。

3 个答案:

答案 0 :(得分:1)

我认为你应该看看Tell Don't Ask Principle

如果object包含计算其名称所需的所有数据,我会将此方法放在该类上。如果这个数据基于其他对象的属性,而父类也包含这个包含数据的子对象,我会再次放置父类。

保持简单。如果我真的不需要,我不会介绍服务类。在DDD术语中,您应该将域相关逻辑放在域类中。

答案 1 :(得分:1)

这是一个包含逻辑的域对象?如果是,我宁愿给它一个DAO的引用,让它自己决定它的名字。通过这种方式,您的逻辑将靠近您的数据。

答案 2 :(得分:1)

有几个问题涉及到这个问题:

  1. 你需要对名字进行某种管理吗? (示例是按名称查找对象的目录。)如果是这样,请考虑使用服务。 (另一种方法是安排每个域对象在找到其名称后自行注册。)
  2. 域对象在创建和命名后是否在逻辑上独立于数据库?如果是这样,那么通过将数据库依赖放在服务中来保持它们独立是一种好习惯。
  3. 如果域对象无论如何都要绑定到数据库,并且如果不需要集中管理名称,那么我认为拥有域对象名称本身会导致更大的object cohesion