在银行客户信息系统(ECIF)里落地 DDD 聚合
客户是「一个实体」还是「一组上下文」?用聚合根与界限上下文重新切分 ECIF 的客户模型。
分类:
ECIF 里「客户」的概念极其庞大:个人、对公、同业,各自的属性、关系、生命周期都不同。如果用一个巨大的 Customer 实体硬扛,代码会迅速腐化。
用界限上下文切分
把客户拆成几个界限上下文:
- 客户主数据(Party):统一的自然人/机构标识与基础属性。
- 客户画像(Profile):风险偏好、营销标签,读写频率高、变化快。
- 客户关系(Relationship):持股、担保、集团关系。
聚合根怎么定
每个上下文内部再定聚合根。例如 Party 上下文里,Party 是聚合根,Address、Contact 是其值对象,保证一致性边界内不跨聚合调用。
经验:聚合的边界应以「事务一致性」而非「业务概念大小」来划。ECIF 里最容易犯的错,就是把所有客户信息塞进一个聚合。
这样设计后,主数据服务稳定,画像服务可以独立迭代,互不影响。