在银行客户信息系统(ECIF)里落地 DDD 聚合

客户是「一个实体」还是「一组上下文」?用聚合根与界限上下文重新切分 ECIF 的客户模型。

ECIF 里「客户」的概念极其庞大:个人、对公、同业,各自的属性、关系、生命周期都不同。如果用一个巨大的 Customer 实体硬扛,代码会迅速腐化。

用界限上下文切分

把客户拆成几个界限上下文:

  • 客户主数据(Party):统一的自然人/机构标识与基础属性。
  • 客户画像(Profile):风险偏好、营销标签,读写频率高、变化快。
  • 客户关系(Relationship):持股、担保、集团关系。

聚合根怎么定

每个上下文内部再定聚合根。例如 Party 上下文里,Party 是聚合根,AddressContact 是其值对象,保证一致性边界内不跨聚合调用。

经验:聚合的边界应以「事务一致性」而非「业务概念大小」来划。ECIF 里最容易犯的错,就是把所有客户信息塞进一个聚合。

这样设计后,主数据服务稳定,画像服务可以独立迭代,互不影响。