天天看点

领域驱动设计(DDD)及微服务

为什么领域驱动设计是微服务架构的最佳设计方法?

领域驱动设计作为一种架构设计方法,微服务作为一种架构风格,两者从本质上都是为追求高响应力目标而从业务视角去分离复杂度的手段。 两者都强调从业务出发,其核心要义强调根据业务发展,合理划分领域边界,持续调整现有架构,优化现有代码,以保持架构和代码的生命力(演进式架构) 。

领域驱动设计主要关注:业务领域,划分领域边界;构建通用语言,高效沟通;对业务进行抽象,建立领域模型;维持业务和代码的逻辑一致性。

微服务主要关注:运行时进程间通信,能够容错和故障隔离;去中心化管理数据和去中心化治理;服务可以独立的开发、测试、构建和部署,按业务组织全功能团队;高内聚低耦合,职责单一。

中台、领域以及微服务

微服务是技术实现和部署的范畴,实现领域或中台的业务逻辑,为前台应用提供服务。领域根据限界上下文可以设计为多个微服务,而如果限界上下文过大,一个微服务也可能会包含多个子领域。

中台是由多个业务条线的共同需求所构成,是需要共享的业务功能和服务单元的集合,一个中台可由一个微服务来实现,也可根据领域驱动设计和微服务拆分原则细分为多个微服务,多个微服务功能集合共同组成一个中台。

DDD分层架构中的服务

DDD的分层架构,分层架构主要包括:展现层、应用层、领域层和基础层(参考图:DDD(领域驱动设计)分层架构),各层都有不同的服务,但由于各层职责不一样,服务目的和实现方式也存在差异。

1、 展现层

展现层负责向用户显示信息和解释用户指令。

2、应用层服务

应用层是很瘦的一层,其服务主要用来表述应用和用户行为。它主要负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装,拼装完领域服务后以粗粒度的服务通过API网关向前台应用发布。通过这样一种方式,隐藏了领域层的复杂性及其内部实现机制。 应用层除了定义应用服务之外,在这层还可以进行安全认证,权限校验,持久化事务控制或向其他系统发送基于事件的消息通知。

3、领域层服务

领域层是较“胖”的一层,它实现了全部业务逻辑并且通过各种校验手段保证业务正确性。业务逻辑包括:业务流程、业务策略、业务规则、完整性约束等。 当领域中的某个操作过程或转换过程不是实体或值对象的职责时,便将该操作放在一个单独的服务接口中,这就是领域服务,领域服务是无状态的。

4、基础设施层服务

基础设施层服务位于基础设施层,根据依赖倒置原则,封装基础资源服务,实现资源层与应用层和领域层的调用依赖反转,为应用层和领域层提供基础资源服务(如数据库、缓存等基础资源),实现各层的解耦,降低外部资源的变化对核心业务逻辑的影响。

5、总结

应用层服务是展现层和领域层的桥梁,通过调用领域对象和领域层服务来表达用例和用户故事。领域对象负责单一操作, 领域层服务用于协调多个领域对象共同完成某个业务操作。 应用服务原则上不处理业务逻辑,领域服务处理业务逻辑。

领域驱动设计(DDD)及微服务

DDD(领域驱动设计)作为微服务设计指导思想,通过事件风暴建立领域模型,合理划分领域逻辑和物理边界,建立领域对象及服务矩阵和服务架构图,定义符合DDD分层架构思想的代码结构模型,保证业务模型与代码模型的一致性。通过上述设计思想、方法和过程,指导团队按照DDD设计思想完成微服务设计和开发。

继续阅读