代码结构

项目是使用maven构建的springboot项目

基于DDD领域驱动分层架构设计,分为接口层interfaces、应用层application、领域层domain、基础设施代理层infrastructure-proxy 、基础设施实现层infrastructure。代理层的作用下面会详细介绍。starter是启动模块,common是通用工具模块

starter

springboot的启动入口

common

本层提供一些通用的工具类和方法

interface

封装应用服务对外暴露接口
主要存放用户接口层,包括与前端交互的http接口、提供给外部的微服务接口等。微服务接口的声明单独放在一个子module里,将jar包发布给外部。
前端或外部应用通过这层接口,向应用服务获取展现所需的数据。这层主要用来处理用户发送的Restful请求或微服务请求。

application

主要存放应用层服务组合和编排相关的代码。
应用服务向下基于微服务内的领域服务或外部微服务的应用服务完成服务的编排和组合,向上为用户接口层提供各种应用数据展现支持服务。应用服务和事件等代码会放在这一层目录里。

domain

主要存放领域层核心业务逻辑相关的代码。领域层可以包含多个聚合代码包,它们共同实现领域模型的核心业务逻辑。聚合以及聚合内的实体、方法、领域服务和事件等代码会放在这一层目录里。
Domain 由一或多个聚合包构成,共同实现领域模型的核心业务逻辑。

infrastructure-proxy

本层抽象出基础设置层所有功能的接口,由基础设施层进行实现,这样其他使用基础设施层能力时不依赖于具体基础设施层了,达到其他层和基础设施层的解耦,从而后续可以很快速的实现基础设施层具体中间件的实现的替换。例如替换数据库,替换缓存中间件,不需要变动其他层代码。

infrastructure

主要存放基础资源服务相关的代码,主要包括平台、开发框架、消息、数据库、缓存、文件、总线、网关、第三方类库等基础代码,可以为不同的资源类别建立不同的子目录。

规范说明

  • 跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现。
  • 中间件(消息、数据库、缓存、文件存储等)相关maven依赖只在基础设施层中有。
  • 微服务订阅方在应用层采用监听机制,接收消息队列中的事件数据,完成事件数据的持久化后,就可以开始进一步的业务处理。领域事件处理可在领域服务中实现

领域事件说明

DDD领域驱动设计-分层架构实践相关推荐

  1. 微服务与领域驱动设计,架构实践总结

    一.软件复杂性 1.复杂原因 如果软件系统存在持续的迭代周期,那么其中业务.技术.架构的复杂性都会直线拉升,其相应的开发难度也会提高,可以用一句话总结其根本原因:唯一不变的就是变化: 业务变化:导致复 ...

  2. DDD领域驱动设计基本理论知识总结

    领域驱动设计之领域模型 加一个导航,关于如何设计聚合的详细思考,见这篇文章. 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity i ...

  3. ddd领域驱动设计_领域驱动设计(DDD)理论启示

    过去几年通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团主站的大部分活动.频道搭建和运营能力,主流程的新需求越来越少,个 ...

  4. DDD 领域驱动设计

    从遇到问题开始 当人们要做一个软件系统时,一般总是因为遇到了什么问题,然后希望通过一个软件系统来解决. 比如,我是一家企业,然后我觉得我现在线下销售自己的产品还不够,我希望能够在线上也能销售自己的产品 ...

  5. 一文理解 DDD 领域驱动设计!

    来源丨SpringForAll社区 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Softwa ...

  6. DDD 领域驱动设计落地实践系列:工程结构分层设计

    引言 前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地.实际上所有的这些架构理 ...

  7. DDD 领域驱动设计落地实践:六步拆解 DDD

    引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...

  8. 【DDD落地实践系列】DDD 领域驱动设计落地实践:六步拆解 DDD

    引言 相信通过前面几篇文章的介绍,大家对于 DDD 的相关理论以及实践的套路有了一定的理解,但是理解 DDD 理论和实践手段是一回事,能不能把这些理论知识实际应用到我们实际工作中又是另外一回事,因此本 ...

  9. DDD领域驱动设计落地实践系列:战略设计和战术设计

    引言 通过前面的文章介绍,相信大家对于什么是DDD有了初步的了解,知道它是一种微服务的架构设计方法论,为我们解决如何建立领域模型,如何实现微服务划分等提供了方向和指导.但是对于如何具体落地使用DDD, ...

最新文章

  1. java获得单元格的值_java – 从单元格值Apache POI获取单元格索引
  2. 二叉树的前序中序后序遍历(当然是非递归的!)
  3. 2016年研究数据可视化最不应该错过的10篇文章
  4. Zstd 压缩性能分析(含比较)
  5. Mybatis-plus批量插入、批量修改数据saveBatch等速度缓慢
  6. 练习一下爬虫,使用Selenium包
  7. linux定时重启tomcat的脚本,Linux系统中的tomcat定时重启脚本
  8. 【使用技巧】【图像编辑和处理】将GIF图缩放
  9. Autodesk 3DSMax 2012 安装说明
  10. Android性能测试之fps获取
  11. Cisco Jabber 多个高危漏洞风险通告
  12. Spark独到见解--1、什么是Spark?及和MR的区别
  13. 祝你生日快乐21音符简谱c语言代码,C语言程序设计:生日快乐歌.doc
  14. 全球约有 150 亿台设备在运行 Java,收费后还能用吗?
  15. 解决python3+selenium+chromedriver运行时chrome浏览器闪退问题
  16. GIS添加图层、查询详细
  17. android视频添加字幕,视频加字幕手机app
  18. VMware虚拟机安装Ubuntu kylin 麒麟系统教程 超详细
  19. jffs2_note
  20. 记一次Very Animation动画插件使用

热门文章

  1. 初识Hibernate——关系映射
  2. Failed to introspect Class [org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyC
  3. eureka client无法启动,java.lang.IllegalStateException: Failed to introspect Class
  4. 微生物增殖java_Java实现微生物增殖
  5. 可位寻址与不可位寻址
  6. 惠普暗影精灵8和惠普暗影精灵7区别
  7. 呼叫中心电话系统,你了解多少?
  8. python中import re_python中re模块
  9. 【蓝桥杯】特别数的和
  10. 【WPF、UWP】搜索蓝牙设备