2011-01-24 64 views
0

我的项目Advertiser和BonusPrograms中有两件事情。价值对象或实体

业务规则是 - :

  1. 广告客户将会从奖金的程序列表中选择分红方案。

  2. 一次只能分配一个奖励计划,以前的奖励计划将被丢弃为该广告商。

  3. BonusPrograms不是由广告商创建的,只分配给他们。

  4. BonusPrograms不是每个广告客户创建的,它是为所有广告客户

  5. 任何新bonusprogram可以随时在项目

我的问题是引进 - :

1 )我已创建Bonus程序,作为对广告客户根聚合的单独的agg根,因为广告客户不创建它,它只分配它。我是否正确?

OR

2)让我的广告客户下总BonusPrograms作为的ValueObject,因为只有一个bonusprogram分配给广告客户,当一个新的分配前一个被删除?

回答

1

我会选择3)这是BonusProgram是一个实体,但不是一个聚合根。很难说不知道更多你的域名,但是从你在这里描述的内容来看,广告(或者市场营销,或者类似的东西)是聚合的,而广告商和奖励计划是这个聚合下的实体。不知道根据你所说的话会有什么样的根源,但它听起来不像广告商或奖励计划。

+0

广告客户是根聚集这是肯定的,但我很困惑与奖金的方案。奖励计划是那些广告客户在选择任何奖金计划时必须做出一些承诺的情况,当承诺结束后,根据该承诺奖金给出奖励计划。由于广告客户不会创建奖金计划只会分配给它,所以我将奖金计划作为单独的根合计 – kamal 2011-01-24 18:22:21

0

首先,让我说我同意保罗,你应该接受他的回答。我已经提出了这个意见,但我可以更好地表达我的想法。

你在这里问两个问题,每个问题都有两个常见的粘性概念。

第一个问题是,如果广告客户是聚合根,BonusProgram相对于广告商的位置的概念。这绝对是一个有趣的问题,取决于你的域名和用例。它不取决于BP是价值对象还是实体,因为聚合通常包含两者。聚合的要点是简化外部(对聚合根)对象的对象遍历。你可以通过选择一个外部对象可以引用的根实体来完成该任务,并且只有一个实例(对于用例)。这意味着客户端对象可以具有对广告商的引用,但不是BonusProgram。为了满足clinet对象的请求,广告商将持有和必要的BP引用。

第二个问题是BP是价值对象还是实体。答案依然取决于你的域名。总是问自己的问题是你是否关心物体的身份。如果你不在意,它是一个价值对象;如果你确实在意这是一个实体。价值对象的经典案例是金钱 - 虽然你一定关心它,但你通常不关心哪一美元是哪一美元(一美元与另一美元相同)!不过,在这种情况下,BonusProgram更像是一个实体,你知道上个月哪个BP有效,以及它与本月BP的结果有什么关系。

保罗又说了同样的话,你应该接受他的回答。

HTH,
Berryl