请教一个建模问题
一个按照合同分期付款的需求,
现在我自己理解的划分:
实体:合同(聚合根),合同付款计划,合同付款核销记录
实体:客户(聚合根)
实体:付款记录(聚合根)
值对象:合同状态,属于合同
Service:核销
问题:客户可能拥有很多个合同,每个合同都有当月需要支付的款项,核销的时候必须将客户所拥有的合同的当月付款计划全部列出,然后排序获得应该核销的款项,并保留核销记录(可能有多条核销记录对应一条付款记录的情况,也会有一条核销记录对应多条付款的情况)。
我发现模型的聚合根如果是合同的话,对于核销Service来讲有可能要跨过合同聚合根,直接对合同付款计划进行访问,这违反了DDD的要求,会打乱对象的生存周期,但是如果把付款计划当作聚合根感觉付款记录好像跑到合同的上层去了,感觉怪怪的,大家指教一下吧。
另外,还有一些问题想问:
1. Service中能否不允许包含具体的业务知识,只能简单的操控对象来完成请求,此时理解为Service是大粒度的功能共享?
2. 一般大家都说只有聚合根才有Repository,那么对于聚合根内部的实体没有Repository的话,如何存取?直接在聚合根的getXXXList()方法里写数据库查询么?
3. 聚合根实体和聚合根内部的实体是否可以引用聚合之外的实体对象呢?
[该贴被pye于2011-04-12 12:42修改过]