一个微服务+DDD(领域驱动设计)的代码结构示例

        </h1><div class="clear"></div><div class="postBody">

前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 :

https://www.cnblogs.com/hafiz/p/9388334.html
https://blog.csdn.net/k6T9Q8XKs6iIkZPPIFq/article/details/78909897
https://www.cnblogs.com/netfocus/archive/2011/10/10/2204949.html
https://blog.csdn.net/bluishglc/article/details/6681253

下面参考了DDD官方的结构,总结了前辈们的相关经验,再根据自身对微服务和DDD学习和理解,做了一个用SpringCloud搭建的最基本的结构例子。个人才疏学浅,如有雷同或是不当之处,望各位大佬见谅和帮忙指正。

首先引经据典 , 参考官方架构草图,DDD总体结构分为四层  :  Infrastructure(基础实施层),Domain(领域层),Application(应用层),Interfaces(表示层,也叫用户界面层或是接口层),各个层面的作用下面介绍。

                        

                    

对于DDD的设计而言,最重要的是如何去划分领域,划分好边界。在代码设计上,之前有看到过大佬用模块(Modules)来进行上下文界定和划分。如图下 :

而对于微服务而言,就非常适合从业务上去划分以上的各个Modules,划分好各个业务板块。

微服务 + DDD,个人觉得应该是首先是从微服务的角度(如何划分微服务)考虑去划分大的业务模块,每一个微服务都应该是一个可以单独部署,各司其职的模块;

而在微服务实际开发中,结合DDD的思想去划分所有属于自己的领域。

如图示例,对于我这个Project而言,是模块已经划分好的微服务应用,代码设计上就分为  Infrastructure,Domain,Application,Interfaces :

            

Infrastructure 层 :  基础实施层,向其他层提供通用的技术能力(比如工具类,第三方库类支持,常用基本配置,数据访问底层实现)

       

Domain层 : 主要负责表达业务概念,业务状态信息和业务规则;是整个系统的核心层,几乎全部的业务逻辑会在该层实现。

      

Application层 :  相对于领域层,应用层是很薄的一层,应用层定义了软件要完成的任务,要尽量简单。

  注 : 这里图里面所说的对内对外,对程序而言,事实上是从展现层调用应用层,应用层调用领域层,领域层或调用基础实施层。

    

Interfaces层 : 负责向用户显示信息和解释用户命令,请求应用层以获取用户所需要展现的数据(比如获取首页的商品数据)

   

以上,就是个人 对 微服务+DDD的代码结构示例,完整代码详见 https://github.com/EalenXie/springcloud-microservice-ddd

无论我们代码结构如何规划,也并非一成不变,应该从实际出发,去思考划分结构的意义。此例子是对于微服务+DDD反应到实际开发,代码的结构设计上的一种初步的思考与探索,一个样板工程,不应该成为我们对实际DDD思考与设计的限制,本例仅供参考。

感谢各位提出意见和支持。

分类: Java
<div id="blog_post_info">
好文要顶 关注我 收藏该文

EalenXie
关注 - 22
粉丝 - 42

+加关注
9
0
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/ealenxie/p/9453483.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/ealenxie/p/9453483.html" title="发布于 2018-08-10 10:29">MapBeanConvert</a>
<br>
<a href="https://www.cnblogs.com/ealenxie/p/9618693.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/ealenxie/p/9618693.html" title="发布于 2018-09-10 13:11">AOP与Filter拦截请求打印日志实用例子</a>
posted @ 2018-08-30 14:04 EalenXie 阅读(18986) 评论(8) 编辑 收藏
</div><!--end: topics 文章、评论容器-->
         </div>

#1楼

2018-08-30 14:15

        <a id="a_comment_author_4054237" href="https://www.cnblogs.com/ZhangTrue/" target="_blank">疯子张</a></div><div class="feedbackCon">
666
支持(0) 反对(0)
     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#2楼

[楼主]

2018-08-30 14:17

        <a id="a_comment_author_4054239" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
@ 疯子张
感谢支持
支持(0) 反对(0)

https://pic.cnblogs.com/face/994599/20160719093549.png

     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#3楼

[楼主]

2018-08-30 18:43

        <a id="a_comment_author_4054540" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
抱歉各位,之前Github代码空包没有提交,现在已经修复,更新了github地址 :https://github.com/EalenXie/springcloud-microservice-ddd
支持(0) 反对(0)

https://pic.cnblogs.com/face/994599/20160719093549.png

     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#4楼

2018-08-30 19:09

        <a id="a_comment_author_4054549" href="https://www.cnblogs.com/gougouyangzi/" target="_blank">洋子小姐</a></div><div class="feedbackCon">
我就说 怎么git访问不了你的这个地址
支持(0) 反对(0)
     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#5楼

[楼主]

2018-08-30 20:12

        <a id="a_comment_author_4054580" href="https://www.cnblogs.com/ealenxie/" target="_blank">EalenXie</a></div><div class="feedbackCon">
@ 洋子小姐
已修复,感谢支持
支持(0) 反对(0)

https://pic.cnblogs.com/face/994599/20160719093549.png

     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#6楼

2018-09-18 11:08

        <a id="a_comment_author_4069858" href="https://www.cnblogs.com/zdd-java/" target="_blank">达兔哥</a></div><div class="feedbackCon">
6666
支持(0) 反对(0)

https://pic.cnblogs.com/face/993840/20170912152802.png

     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#7楼

2019-05-07 17:11

        <a id="a_comment_author_4249963" href="https://home.cnblogs.com/u/1286441/" target="_blank">当年的反应慢</a></div><div class="feedbackCon">
对于entity或者value,常常需要注入repositories 根据传入的参数进行级联加载,比如somebody.classmates(String name) 查找某个学生的同学,这个一般你怎么做呢?我的方案是aspectj+ltw,比较复杂,有没有简单的方案呢
支持(0) 反对(0)
     </div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage">&nbsp;&nbsp;
         </div>

#8楼

    <span id="comment-maxId" style="display:none">4297595</span><span id="comment-maxDate" style="display:none">2019/7/10 下午7:19:11</span>

2019-07-10 19:19

        <a id="a_comment_author_4297595" href="https://www.cnblogs.com/quyf/" target="_blank">quyf</a></div><div class="feedbackCon">
微服务之间互相存在调用,走的是哪一层呢,
支持(0) 反对(0)
     </div></div>
刷新评论刷新页面返回顶部
【推荐】腾讯云海外1核2G云服务器低至2折,半价续费券限量免费领取!
【推荐】阿里云双11返场来袭,热门产品低至一折等你来抢!
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【提升】这个价值 50W 年薪的问题,终于被马老师说明白啦...
【推荐】天翼云双十一翼降到底,云主机11.11元起,抽奖送大礼
【提升】Java程序员年薪40W,他1年走了别人5年的学习之路
【推荐】流程自动化专家UiBot,体系化教程成就高薪RPA工程师
相关博文:
· 领域驱动设计实战--战略建模
· [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店
· 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
· C#进阶系列——DDD领域驱动设计初探(一):聚合
· 【DDD】领域驱动设计实践 —— 框架实现
» 更多推荐...
    <div id="google_ads_iframe_/1090369/C2_0__container__" style="border: 0pt none;"><iframe id="google_ads_iframe_/1090369/C2_0" title="3rd party ad content" name="google_ads_iframe_/1090369/C2_0" width="468" height="60" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" srcdoc="" style="border: 0px; vertical-align: bottom;" data-google-container-id="2" data-load-complete="true"></iframe></div></div>
</div>
<div id="under_post_kb">

最新 IT 新闻:
· 41次,55颗,100%成功!长三甲系列火箭的北斗缘
· 企业服务 2019 :务实者的游戏
· 12亿网民信息泄漏!4TB数据,无需密码谷歌云上查看
· 英特尔中国:截至2018年底女性员工占比33%
· DeepMind的Al不仅能打《星际争霸》,AlphaFold还能解析蛋白结构
» 更多新闻...

DDD(领域驱动设计)+SpringCloud的代码示例相关推荐

  1. C#进阶系列——DDD领域驱动设计初探(五):AutoMapper使用

    前言:前篇搭建了下WCF的代码,就提到了DTO的概念,对于为什么要有这么一个DTO的对象,上章可能对于这点不太详尽,在此不厌其烦再来提提它的作用: 从安全上面考虑,领域Model都带有领域业务,让Cl ...

  2. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  3. DDD领域驱动设计浅谈

    DDD领域驱动设计是什么 1 DDD是什么? DDD是领域驱动设计,是Eric Evans于2003年提出的,离现在有17年. DDD名为:Domain Driven Design (领域驱动设计) ...

  4. DDD领域驱动设计之聚合、实体、值对象

    关于具体需求,请看前面的博文:DDD领域驱动设计实践篇之如何提取模型,下面是具体的实体.聚合.值对象的代码,不想多说什么是实体.聚合等概念,相信理论的东西大家已经知晓了.本人对DDD表示好奇,没有在真 ...

  5. 浅谈我对DDD领域驱动设计的理解

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

  6. [转]浅析DDD(领域驱动设计)

    最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...

  7. 浅析DDD(领域驱动设计)

    最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等.其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模 ...

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

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

  9. DDD领域驱动设计-视频讲解+实战

    目录 简介 解决的问题 过度耦合 现状 DDD的分层架构和构成要素 小结 分包应用 DDD领域驱动设计:实体.值对象.聚合根 DDD应用 战略建模 领域 限界上下文 需求分析 上下文映射图 战术建模- ...

最新文章

  1. 近来工作和面试一些人的感受(原)
  2. java 反射加实例化内部类
  3. 公司要上监控,选型调研下 Zabbix 和 Prometheus
  4. 哈尔滨工程大学计算机学院保研政策,哈尔滨工程大学计算机科学与技术学院(专业学位)计算机技术保研夏令营...
  5. 数据仓库专题(6)-数据仓库、主题域、主题概念与定义
  6. mongodb数据库导出备份
  7. php7 mcrypt模块_如何在php7.2/php7.3中安装mcrypt扩展?
  8. 李开复:拥抱美丽的网络应用模式——云计算
  9. ppt倒计时3分钟_老板发来200页PPT文件,让我翻译成英文,3分钟教你搞定
  10. Atitit prgrmlan topic--express lan QL query lan表达式语言 目录 1. 通用表达语言(CEL) 1 1.1. 8.2 功能概述 1 1.2. Ongl
  11. 微信小程序发送模板消息详细教程
  12. Java中this的用法
  13. 计算机怎么安错误,电脑安装iTunes提示安装程序发生错误如何解决
  14. 跳出舒适区发现更大的世界,来社科院杜兰金融管理硕士项目汲取能量挑战自我
  15. 如何在arm-linux下支持2T硬盘
  16. Android多线程理解
  17. ios降级鸿蒙,iOS 降级 13.3 系统方法,你成功了没
  18. Spark的搭建及实现单词统计
  19. iOS中SDK的简单封装与使用
  20. 【过关斩将】如何在工作中提高沟通能力?

热门文章

  1. 区块链真的能保护隐私吗?
  2. mybatis Example 使用方法
  3. 【思维风暴】算法迭代和递归的理解
  4. UNP读书笔记第一章
  5. linux fdisk调整root大小,Linux下分区大小改变及fdisk应用
  6. 首届全球 Pulsar Hackathon 2021 结果宣布,全球 Top5 团队出炉!
  7. 在互联网卷不动了,还能做什么?
  8. django自强学堂地址
  9. web.xml文件的作用?
  10. 华为诺亚方舟实验室(智能工业视觉组)招聘实习生