DDD实战(一):如何设计分层架构?

一、前言

早2年就开始看到各种推文在讲DDD如何如何的好,例如:微服务已死!DDD称王!。当时听到这个口号的时候吓了一跳,难道微服务才落地没两年就要夭折了?DDD是个什么鬼?好不好学?大家都这么卷吗?不声不响的搞出这么牛的玩意?

带着好奇心去听了所谓的某大厂老师的“先导课”,听完后感觉DDD太牛B了,兴奋的睡不着觉。

急迫的想问一问:

有Demo 代码吗?

有Demo 代码吗?

有Demo 代码吗?

有Demo 代码吗?

在网上开始私信一些写DDD文章的作者,了解后有点失望,几乎没有落地的项目在用。得到这些结果后就暂时放下了,一直到3个月前要起一个新项目,当时就想能不能用DDD去落地,又开始分析需求、制作模型、编写规范...... 最终昨晚(8月25日)第一期上线了。

项目的上线不是终点,相反仅仅是起点,后续能不能维护好或者维护多久也都是未知。接下来会将落地的经过和后续的迭代慢慢分享给大家。

二、项目介绍

一些具体的DDD(领域驱动设计)的概念相信大家都快会被了,这里就不多讲了。主要是把项目的分层架构设计进行讲解。

2.1 项目说明

基于DDD(领域驱动设计)的轻量级快速开发框架,致力于企业技术架构的可沉淀和可传承,解决复杂业务场景的扩展问题,目前已在公司核心业务领域进行落地。

2.2 项目结构

./itunion-ddd-common  // 基础组件集合
├── itunion-ddd-common-base  // 通用类库
├── itunion-ddd-common-exception // 统一异常异常
├── itunion-ddd-common-mybatis // mybatis--plus
├── itunion-ddd-common-redis // redis缓存
├── itunion-ddd-common-swagger // api可视化
└── pom.xml
.itunion-ddd-service // 核心服务
├── itunion-ddd-web // WEB端-接口层
├── itunion-ddd-application // 应用层
├── itunion-ddd-domain // 领域层
├── itunion-ddd-infra // 基础服务层
└── pom.xml

2.3 搭建目的

  • 解决开发过程中后期维护逻辑混乱和维护成本高的痛点。
  • 从MVC框架过度到更适合复杂业务的开发框架。
  • 推动DDD思想在团队中萌芽,寻找更优开发思路。

2.4 必须坚持原则

  • 领域驱动(DDD)设计为基础,按照分层作为默认开发规范。

2.5 DDD 分层架构

分层说明:

  • 适配层(Web):负责对前端展示的路由和适配,可以理解为MVC的Controller。
  • 业务应用层(Application):负责获取输入、组装上下文、参数校验和调用领域层做业务处理。这一层是开放的,可以绕过领域层,直接访问基础设施层。
  • 领域层(Domain):或称为模型层,封装了核心业务逻辑,通过领域服务和领域对象的方法对应用层提供业务实体和业务逻辑计算。
  • 基础设施层(Infrastructure):负责技术细节问题的处理,比如对数据库的CRUD、消息队列、Redis、搜索引擎等。领域的防腐层也放在这里,外部依赖需要通过转义处理才能被领域层和应用层调用。

PS:在设计和开发时,不要将本该放在领域层的业务逻辑放到应用层中实现,因为庞大的应用层会使领域模型失焦,时间一长你的服务就会演化为传统的三层架构,业务逻辑会变得混乱。

三、部署

3.1 源码地址

基于领域驱动设计(DDD)的微服务快速开发框架.https://gitee.com/itunion/ddd-framework

3.2 前期准备

  • 拉取Master分支代码
  • 安装必要环境:jdk1.8+、mysql5.7+、redis等
  • 启动 itunion-ddd-web 项目

3.3 访问地址

http://127.0.0.1:8080/itunion-ddd-web/api

猜你喜欢

转载自blog.csdn.net/zhenghhgz/article/details/126547786