背景
近年来,苏宁集团业务不断扩大,用户快速增长,线上线下融合不断深入,系统的复杂性越来越高,技术的广度和深度都在不断拓展。
在整个集团技术不断迭代演进的过程中,集团内各个系统也同步更新、迭代、重构,快速适应技术的发展,满足业务增长的需求。
苏宁金融会员系统作为苏宁金融的一级系统,从易付宝诞生开始就作为基础支撑系统为整个金融业务系统提供会员服务。经过多年的演化和业务版本的迭代维护,到如今代码调用错综复杂,各个逻辑散落在代码的各个角落,牵一发而动全身。而且这些业务逻辑基本都集中落在了代码的Biz层中,导致Biz层臃肿庞大。
为了适应苏宁业务的快速发展,跟进苏宁集团多活架构的演进,金融会员系统的技术架构需要再一次跃迁。
架构选型
重构系统的架构选型是一个仁者见仁智者见智的事情,没有哪一种模式是标准答案,只能追求更适合的选项。本次对金融会员系统重构,从框架选型到架构选型都做了新的选择,选择了Spring+Mybatis+Mycat+MySQL的技术框架和DDD+CQRS+插件的架构模式。
领域驱动设计(DDD,Domain-Driven Design)作为这一次系统重构的架构选型,主要考虑到以下因素:
- DDD模式更加关注业务领域,能够使得苏宁金融会员系统更加聚焦会员产品的核心业务。
- DDD模式采用面向对象的设计,将系统模块化,有利于实现软体模块的高内聚和低耦合,使得会员系统更加适合应对苏宁业务的快速迭代。
技术实现
领域驱动设计实践
DDD模式的最大优势在于聚焦产品核心业务,最难搞定的也在此处。那么该如何实现呢?领域驱动设计的关键在领域模型,如果把领域模型拆开来看,如下图,就不难理解了。