防止断更 请务必加首发微信:1716143665
关闭
讲堂
算法训练营
企业服务
热点资讯
极客商城
客户端下载
兑换中心
渠道合作
推荐作者

开篇词 | 学好了DDD,你能做什么?

2019-10-14 欧创新
DDD实战课
进入课程

讲述:欧创新

时长10:15大小9.40M

你好,我是欧创新,人保高级架构师,一名奋斗在软件架构一线十余年的技术人。

目前热衷于采用领域驱动设计(DDD)实现中台业务建模,专注基于 DDD 的微服务设计和开发等。另外,我也正在深入探索传统企业中台数字化转型的技术和方法体系。很高兴在这个专栏和你见面!

我与 DDD

说起 DDD 的实践,那就不得不提微服务了。2015 年,我刚开始接触微服务,那时候和别人去介绍微服务的设计理念,接受度并不高,毕竟大家普遍采用的还是集中式架构。

但即便是在四年前,业务的日渐复杂也是可以预见的,微服务的价值确确实实存在。我就从那个时候开始深入研究,作为公司的高级架构师,我也一直处于公司中台转型和微服务建设的一线。

这个过程中,我和我的技术团队踩过不少坑,最尖锐的一个问题是:“微服务到底怎么拆分和设计才算合理,拆多小才叫微服务?”而微服务的边界历来也是最容易产生争议的地方。

紧接着,阿里巴巴成功完成了中台战略转型。于是,很多大型公司也开启了中台数字化战略转型,中型公司也根据自身需求跃跃欲试。但也有很多公司由于历史原因,存在着大量系统重复建设的问题。

作为中台,需要将通用的可复用的业务能力沉淀到中台业务模型,实现企业级能力复用。因此中台面临的首要问题就是中台领域模型的重构。而中台落地时,依然会面临微服务设计和拆分的问题。这两个问题一前一后,放在任何一家公司,我想都是一个不小的挑战。

这也是我一直在探索和解决的问题。这两年,中台越来越火,微服务越来越热,参与的人越来越多。那是否有好的方法来指导中台和微服务的设计呢?

一次偶然的机会我接触到了 DDD,深入研究后,我发现,运用 DDD 设计思想实现的微服务边界确实清晰很多,业务领域划分也十分合理。后来,我和我的伙伴们用 DDD 做了很多的微服务实践。

关于专栏

有了这样一个基础,我开始尝试将我对 DDD 的理解和一些实践经验沉淀,并写了几篇文章发表在了 InfoQ 上。在读者的留言中,我发现很多人对 DDD 是有一定的了解的,但由于 DDD 的知识点多且较为抽象,体系庞大,又缺少实践经验和案例指导,很多人对 DDD 的应用都有这样那样的困惑,哪怕知道 DDD 的好处,但是也感到无从下手。

收到极客时间的邀请后,我就开始全力打造课程大纲,力求干货充盈,理论与实践并重。这做起来并不是一件轻松的事儿,专栏从确定主题到和你见面,已经耗时三个多月了。

DDD 虽然历史很久了,但它与微服务和中台设计的结合,却是一片很新的领域。早在 2003 年就诞生的 DDD,怎么来指导“迟到”近 20 年才大热的微服务设计呢?

我认为,要想应用 DDD,首要任务就是要吃透 DDD 的核心设计思想,搞清楚 DDD、微服务和中台之间的关系。中台本质是业务模型,微服务是业务模型的系统落地,DDD 是一种设计思想,它可以同时指导中台业务建模和微服务设计,它们之间就是这样的一个铁三角关系。DDD 强调领域模型和微服务设计的一体性,先有领域模型然后才有微服务,而不是脱离领域模型来谈微服务设计。

其次,就是通过战略设计,建立领域模型,划分微服务边界。这步是关键,你可以借助专栏中的一些经验。

最后,通过战术设计,我们会从领域模型转向微服务设计和落地。此时,边界清晰、可持续演进的微服务架构雏形就在你面前了。

遵循以上过程,这门课的设计思路也就诞生了。

关于课程设计

如果你以往对 DDD 的了解并不深入,甚至是第一次接触,你一定会觉得 DDD 的术语非常多,且非常陌生,这些术语之间的关系都算是个“拦路虎”。

搞懂这些之后呢,怎么应用它们,从何下手来设计领域模型等等这些问题又接踵而至。

如果你对 DDD 有过研究,在学会怎么用之后,你可能还会反过来想:“我费了这么大劲儿去搞懂它,那它到底会让我的系统变成什么样呢?可以解决什么具体问题?是不是真有大家说得那么好?”

这些都将是这个专栏要交付给你的内容。总结一下的话,我希望这个专栏能带给你这样几点收获:

  1. 用浅显易懂的案例带你了解 DDD 必知必会的 10 大核心概念,深入设计思想,厘清各知识域之间的关系;
  2. 用 DDD 分层架构带你弄懂微服务架构各层之间的关系,并完成微服务分层和代码模型设计;
  3. 用 DDD 战略设计和事件风暴带你完成领域建模和企业级中台业务建模;
  4. 用一个典型的案例带你完整走一遍 DDD 战略设计和战术设计的全流程,学习 DDD 在领域模型和微服务设计过程中的技术要点;
  5. 带你深化微服务架构设计原则和注意事项,建立适应你公司技术能力和文化的微服务,建立演进式的微服务架构。

希望这些收获能够给正在从事或者有兴趣深入了解微服务设计和中台的你,提供一些实质性的帮助。

在具体的课程设计上,我将内容分为了三大部分:基础篇、进阶篇和实战篇。下面我来逐一介绍一下。

基础篇

基础篇主要讲解 DDD 的核心知识体系,具体包括:领域、子域、核心域、通用域、支撑域、限界上下文、实体、值对象、聚合和聚合根等概念。我会用浅显易懂的案例带你理解它们以及它们之间的合作、依赖关系。

进阶篇

进阶篇主要讲解领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。具体包括:

  • 如何通过领域事件实现微服务解耦?
  • 怎样进行微服务分层设计?
  • 如何实现层与层之间的服务协作?
  • 通过几种微服务架构模型的对比分析,让你了解领域模型和微服务分层的作用和价值。
  • 另外,我还会介绍中台设计的核心思想,和你探讨如何实现前中后台的协同和融合?如何利用 DDD 进行中台设计?

实战篇

实战篇是我们专栏课程的重点,我准备了多个实战小项目。

  • 中台和领域建模的实战:带你了解如何用 DDD 设计思想构建企业级可复用的中台业务模型,了解事件风暴以及用事件风暴构建领域模型的过程。
  • 微服务设计实战:带你了解如何用 DDD 设计微服务代码模型,如何从领域模型完成微服务设计,建立领域模型与微服务代码模型的映射关系,如何完成微服务的架构演进等。

然后我会用一个典型的案例将 DDD 所有的知识点串联在一起,带你深入了解如何用 DDD 的设计思想来完成领域建模和微服务设计的全流程。

最后,我还会补充分享一个前端的最新设计思想,带你了解如何借鉴微服务的设计思想来设计前端应用,实现前端应用的解耦。同时,我还为你总结了微服务设计原则以及分布式架构设计的关键注意事项。

最后,我想说,DDD 看似复杂,可学习起来并不困难,多动手参与几次 DDD 事件风暴工作坊,你就能很快理解 DDD 的核心设计思想和设计过程,成功进阶了。

如果你的公司尚不能给你提供实战的机会,你可以在这里小试牛刀。

相信这个专栏会帮助你掌握一套完整而系统的基于 DDD 的微服务设计和拆分方法,明确从战略设计到战术设计的微服务标准设计过程,使得你的微服务设计思路能够更加清晰,设计过程更加规范,让你的中台和微服务落地如虎添翼。

最后,感谢你的关注。我也很想借此认识一下你,了解一下你对 DDD 都有哪些认知?是否有机会应用,学习过程中遇到过哪些困难?对这门课又有怎样的期待?欢迎你留言和我交流。

现在,就让我们一同开启 DDD 之旅吧!

unpreview

© 加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。
下一篇
01 | 领域驱动设计:微服务设计为什么要选择DDD?
 写留言

1716143665 拼课微信(29)

  • 陈华应
    2019-10-14
    前两天刚说再买剁手,今天看完开篇还是买了~工作中有过应用,也啃过砖头厚的实现领域驱动,还是有许多不明就里的细节以及应用上的困惑,希望跟着专栏,理解,应用都上一个台阶~
    2
    7
  • 流沙河
    2019-10-14
    个人的理解,中台的观察视角比较高一些,是给企业的高层人员的,是企业架构或者企业信息化整体战略的结果,阿里当时面临着天猫体系和淘宝体系以及聚划算等等多个相对独立的业务部门,各个业务部门的系统共享比较差,于是通过打造中台来将各个业务线的通用业务逻辑和通用系统抽取出来,逐步沉淀和优化,以至于后期各种新的业务应用可以快速的基于这套中台系统实现出来,形成了大中台小前台的状态,所以中台应该是一套通用业务系统的集合体。当然针对单个系统或者单个平台可以考虑微服务的系统架构设计,微服务系统的边界划分是个难题,DDD应该是个很好的设计思想。期待后续的课程。
    展开

    作者回复: DDD战略设计是用来建立业务模型的,适用于企业级的中台,同样也适用于项目级的领域建模。它的战术设计适用于微服务的设计,所以DDD是个好东西。希望能对你有所帮助。

    4
  • 天涯海峰
    2019-10-14
    实战课,开发语言用什么
    展开

    作者回复: DDD是一种架构设计方法,不限定语言,我习惯用JAVA,所以用JAVA做示例,你可以用你自己熟悉的语言来实战。

    1
    3
  • G
    2019-10-16
    老师,有没有整理思维导图哈😊
    展开

    作者回复: 思维导图还没整理,可以先看下开篇词里的DDD知识体系图。等我后面有时间的时候再整理一下思维导图哈。

    2
  • 守候、
    2019-10-15
    一直感觉DDD概念太多,学习无从下手,更是无法应用于实战。老师这个系列真是及时!

    作者回复: 我刚接触也是这种感觉,其实熟悉起来也会很快的。做一两次领域建模和微服务设计就能理解透彻了。

    2
  • 2019-10-21
    移动端可以学习吗
    展开

    作者回复: 如果移动端包含业务逻辑,可以建立领域模型是没有问题的。DDD是一种领域建模和微服务的设计方法。

    1
    1
  • zj
    2019-10-21
    问一下老师,一般增删改查有必要使用DDD模式开发吗,感觉增删改查用DDD代码写起来很麻烦

    作者回复: 要考虑系统的复杂度和成本,微服务虽然现在很流行,但有些场景下传统架构实现方式成本更低,效率更高。并不一定比传统架构有优势。所以这个需要结合你的业务和系统的情况来分析,如果可以构建领域模型,我建议你可以用DDD的设计方法,但是具体用不用它的战术设计,你需要结合你的团队情况,毕竟还是有一些复杂度的。

    1
  • 业余草
    2019-10-18
    DDD,很早就接触领域驱动设计了,可以一直没搞懂它的精髓,希望跟着作者一起做到活学活用!

    作者回复: 一起学习提高哈。

    1
  • K战神
    2019-10-14
    部门现在在组织学习DDD,我们现在的架构已经是微服务架构了。一直想用DDD驱动微服务的设计。
    还是非常想知道DDD的一些实践和坑
    展开

    作者回复: 等着实战篇哈,有一些非常细致的干货。

    3
    1
  • 夙梦流尘
    2019-10-18
    事务控制交给应用层控制就好了吧,为什么聚合也要事务控制呢

    作者回复: 对的,事务控制是由应用层控制的。它控制微服务内聚合之间的事务和微服务之间服务直接调用的事务。

    1
  • 葡萄吃葡萄皮
    2019-10-17
    现在对于DDD模型。持久化数据应该使用哪种比较合适?Mybatis?Spring Data JDBC? JPA?

    作者回复: DDD在基础层是通过仓储的控制反转的方式来实现应用与基础资源来解耦的。也就是说应用逻辑里面不应该含有基础资源的实现代码,SQL语句等与数据相关的代码不应放在业务逻辑代码来实现。以后如果需要换数据库的话,对应用逻辑影响相对会小很多。目前来说持久化的工具Mybatis可能会好一些。

  • Benjamn
    2019-10-16
    我是一个产品经理。我觉得DDD的设计思路,对于搭建产品系的架构,产品与产品之间的业务领域切分和定位,也是非常有帮助的。希望能够通过这次专栏的学习,能够受益。非常期待!!!

    作者回复: 非常赞同。希望能帮助到你。

  • 如是
    2019-10-16
    很多人技术也很好,但是总是设计不好一个系统,很大的原因就是在这里,这门课程可以很好的补充这一点

    作者回复: DDD的设计理念确实能给软件设计带来很大的改变,尤其是对微服务的设计。希望能对你有帮助。

  • 斯图尔特
    2019-10-15
    最近一直在推进微服务改造中,希望能得到启发,加速微服务推进。

    作者回复: 有什么心得体会,一起交流哈。

  • edisonchou
    2019-10-15
    曾经看了看Eric Ivans的《领域驱动设计》,一时间头都大了。然后看了看《领域驱动设计模式、原理与实践》,发现可以接受了,但是还是没能应用到项目中,也就忘得差不多了。希望能够跟这个课程了解更多实战中的内容,以此来加强对DDD的理解。
    展开

    作者回复: 同感哈,毕竟微服务和中台是几年才出现新事物。需要有一个适配的阶段和过程。

    1
  • Erik
    2019-10-15
    老师你好,作为一个独立开发者,有没有必要做一个前中后台的分层?

    作者回复: 首先要做的是前后端分离,然后微服务内还有服务分层的概念,保证领域层的稳定和应用层的服务组合和编排。目的都是为了解耦,适应外部的变化。

  • Jade
    2019-10-15
    老师,用.net 来实现的话,会不会很麻烦?
    展开

    作者回复: DDD是一种设计方法,跟语言没关系。微服务可以用什么语言,你就可以用什么语言。.net在数据仓储那一块似乎还更有优势。

    1
  • 周浩杰
    2019-10-15
    讲得是真好。中台其实是业务划分。而且是大的业务划分。微服务可以是中台的技术落地方案。DDD是设计思想。可以同时指导我们怎么去划分业务,怎么去拆分服务。

    作者回复: 是的,理解了这个关系,相信你就能很快掌握的。其实就是一层纸,捅破了就明了了。

  • 我是你的导师杨永信[...
    2019-10-15
    打卡加油👄
    展开

    作者回复: 加油!

  • Link
    2019-10-14
    最近开始主导一个小项目,对需求发析,业务建模, 领域模型有点迷糊.不知道DDD能不能提供一套方法论指导软件开发(业务建模+系统设计)?
    展开

    作者回复: 学完这个专栏,你应该就能了解整个体系了,实战篇里会帮你解答这些疑问的。