DDD领域驱动设计(DDD:Domain-Driven Design)
架构背景:
现有的架构设计实在受不了,业务的反反复复地变化,导致代码圈复杂度之深让人恐惧。之前的微服务架构经验让我更加彻底点,采用DDD领域驱动设计进行整个改变。
随着经过几个月的努力,确实慢慢地体会到ddd的架构设计的优势,聚合根设计能够协助我们整个服务改造,开发起来越来越迅速。
CQRS访问方式:
在CQRS的架构体系,首先会被独立出来两个组件,一个事command的微服务负责add、update等改变状态的动作,query的微服务顾名思义就是读动作。
- 微服务采用spring-boot框架
- 构建、运行采用docker容器
- CQRS的axon、eventbus,存储采用elasticsearch
- gateway采用自主研发的方式,支持注册、发现、路由方式
案例:
gateway在之前的blog已经写过,不在这里叙述
首先简单的rest controller
@RestController public class NotifyController { @Autowired private CommandGateway commandGateway; @RequestMapping(value = "/notify", method = RequestMethod.GET) public void notify(HttpServletRequest request) { commandGateway.send(asCommandMessage(new CreateTaskCommand("1","chenyang","China")), new CommandCallback() { @Override public void onSuccess(Object result) { //成功继续事情 } @Override public void onFailure(Throwable cause) { //失败 } }); } }
Command:
public class SuccessNotification extends AbstractAnnotatedAggregateRoot<String> { /** * The constant serialVersionUID */ private static final long serialVersionUID = -159779842362041665L; @AggregateIdentifier private String id; @CommandHandler public SuccessNotification(SuccessNotifyCommand command) { apply(new SuccessNotifyEvent(command.getId())); } SuccessNotification() { } @CommandHandler void on(SuccessNotifyCommand command) { apply(new SuccessNotifyEvent(command.getId())); } @EventSourcingHandler public void on(SuccessNotifyEvent event) { this.id = event.getId(); } }
Event:
@EventHandler String on(SuccessNotifyEvent event) { return "world"; }
最终结论:
相对于烟囱式的方式,ddd对于开发者以及架构师要求更高,充当角色之一领域专家,需要对于聚合根理解透彻,才能更好地理解业务。
相关推荐
DDD面向对象设计,数据行为绑定,告别贫血模型;降低复杂度,分而治之; 优先考虑领域模型,而不是切割数据和行为;准确传达业务规则,业务优先;代码即设计;欢迎有需求的朋友下载。
1 DDD领域驱动设计概述 2 DDD核心概念 3 领域建模 : 事件风暴 4 DDD的中台、微服务架构映射 5 DDD架构演进
DDD微服务软件架构设计 采用spring cloud alibaba微服务组件,nacos、openfeign、spring cloud gateway 数据库:mysql 持久化插件 mybatis-flex 引入rbac权限控制,集成spring security和oauth2.1实现分布式认证授权 ...
基于DDD的领域建模中的模版和工具实践 架构分层模型适配 金融支付系统的改造之路 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦 如何让DDD落地 淘宝应用架构升级——反应式架构的探索与...
本文采用 DDD(领域驱动设计)作为微服务设计指导思想,通过事件风暴建立领域模型,合理划分领域逻辑和物理边界,建立领域对象及服务矩阵和服务架构图,定义符合 DDD 分层架构思想的代码结构模型,保证业务模型与...
CongoMall(刚果商城)不一样的TOC商城系统,SpringCloud-Alibaba微服务架构设计,基于DDD领域驱动模型开发,代码设计优雅,涵盖商城核心业务。系统集成分布式锁、分布式事务、分库分表、消息队列、数据搜索、服务...
DDD-分布式微服务系统架构脑图
我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例,并结合领域驱动设计(DDD)以及命令查询职责分离(CQRS)体系结构模式,对事件驱动的微服务...
基于DDD的领域建模中的模版和工具实践 基于FP的DDD实践分享 架构分层模型适配 金融支付系统的改造之路 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦-张逸 领域驱动建模(Evans DDD) 领域...
基于 DDD 架构的电商微服务项目实践-kafeiMall
Dante Cloud (但丁,原 Eurynome Cloud) 是一款企业级微服务架构和服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的、支持智能电视、IoT等...
基于django框架的领域驱动实战;老项目的拆分,新项目的规划;内包含基础框架、DDD、微服务和基础工具 适应场景:系统拆分、复杂系统的重构; python3.9+ django3.0+
Dante Cloud 是一款企业级微服务架构和服务能力开发平台,是采用领域驱动模型(DDD)设计思想的、全面拥抱 Spring Authorization Server 的、基于 OAuth2.1 协议的、支持智能电视、IoT等物联网设备认证的多租户微服务...
The purpose of a debugger such as ddd is to allow you to see what is going on “inside” another program while it executes—or what another program was doing at the moment it crashed. ddd can do four ...
基于简化的微服务架构和Docker容器的Microsoft由Microsoft提供的示例.NET Core参考应用程序。 免责声明 重要说明:此示例应用程序的当前状态是ALPHA,认为这是版本0.1版本的基础,因此,很多方面还有待改进和...
基于DDD的领域建模中的模版和工具实践 基于FP的DDD实践 架构分层模型适配 可视化的遗留系统微服务改造 领域建模的易与难 领域驱动架构透析与架构解耦 领域驱动设计在系统重构中的应用实践 如何让DDD落地 淘宝应用...
基于DDD的领域建模中的模版和工具实践(36页).pdf 如何让DDD落地(32页).pdf 微服务的容器化实践(19页).pdf 架构分层模型适配(39页).pdf 淘宝应用架构升级——反应式架构的探索与实践(27页).pdf 演进式架构...
让领域驱动设计变得触手可得 - 基于 DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架。