软件设计之美
郑晔
开源项目 Moco 作者
19890 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
软件设计之美
15
15
1.0x
00:00/00:00
登录|注册

27 | 领域驱动设计:如何从零开始设计一个软件?

你好!我是郑晔。
在前面的内容中,我给你讲了软件设计的各种基本工具。我们学习了程序设计语言,知道怎样把设计更好地落地;学会了各种编程范式,知道了可以用什么样的元素去做设计;我们还学习了设计原则与模式,知道了怎样组合分解出来的各个元素。
工具都有了,理论也武装上了,那么我们该如何实践呢?或者说,我要去分解组合的东西是从哪而来的呢?这就需要你对设计方法有一个基本的认知了,也就是说,我们要理解,在真实世界中,解决具体问题是怎样的一个过程。
那从这一讲开始,我们就来谈谈设计方法的话题,一起了解一下设计的基本过程。
首先,你知道哪些设计方法呢?
我知道的一种做法是,有些人一上来会先设计数据库,因为他们觉得,程序就是数据加函数。数据呢,就要存到数据库里,剩下的就是根据需要对数据库表进行增删改查。但是从我们之前的讲解中,你可以看出,这种思路实际上是一种结构化编程的思路。
后来有人就用面向对象的思路,先来找实体,也就是对象,当然这些实体也要有一些能力。最终,这些对象还是要写到数据库里,同样也是要提供增删改查的能力。
你看,这两种做法本质上没什么太大的区别,都是围绕着数据在做文章。在业务需求不复杂的年代,围绕数据做文章的做法还能满足开发的要求,但随着软件日益深入到人们日常工作和生活中,软件变得越来越复杂,这种做法就越发显得笨拙了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

领域驱动设计(DDD)是一种新的软件设计方法,通过使用通用语言,让业务人员加入到设计过程中,拉近了业务人员与开发人员之间的距离,打破了组织的藩篱。DDD的核心概念包括通用语言和模型驱动的设计。通用语言是在业务人员和开发人员之间建立的一套共有的语言,填平了二者之间的鸿沟。事件风暴是一种更正式的实践,通过识别领域事件、命令和实体/聚合,帮助团队建立通用语言。DDD的实践过程中,让不同角色的参与其中,让知识在所有人的头脑中进行构建,得到一个大家都认同的结果。DDD的应用能够有效地解决业务软件开发中遇到的大部分问题,对于复杂的软件系统设计具有重要意义。模型驱动设计是DDD的重要组成部分,分为战略设计和战术设计。战略设计是高层设计,将系统拆分成不同的领域,而战术设计是低层设计,考虑如何具体地组织不同的业务模型。通过DDD,建立一套业务人员和开发人员共享的通用语言是至关重要的。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(21)

  • 最新
  • 精选
  • 沧浪之水
    如果把写代码比作搬砖的话,那么学习代码设计,无疑就是去蓝翔学了个挖掘机,效率大大提升。至于现在很多程序员追求的各种面试造的火箭,更像是一种企业管理知识,对于大部分搬砖的人,提升意义不大。

    作者回复: 这个比喻实在是太有特色了😂

    2020-08-12
    3
    19
  • jg4igianshu
    实体:在时间上有连续性,并且有唯一标识可以来区分的对象,具有生命周期和行为。 值对象:用来描述事物的,不区分谁是谁的,不可变的对象,不具有生命周期和行为。

    作者回复: 学会抢答了😄

    2020-07-31
    16
  • 桃子-夏勇杰
    郑老师,说了实话,《领域驱动设计》这本书一般人真是读不下去,应该耽误了不少人学习DDD。但是说实话,DDD真是太难学了,能把DDD在公司里运用起来,特别是战略设计,几乎就是一个组织变革,需要有同时能够影响业务合作又能引导事件风暴这个高难度的工作坊的人才。虽然像TW这样的公司已经在努力推广这种设计方法了,极客时间也开了《DDD实战课》,但是,离很多公司离这个设计方法还是很远的。DDD之后如何发展,郑老师怎么看?

    作者回复: DDD其实不是难,而是概念多,缺乏一个结构理解它。另外,很多人欠缺的不是DDD,而是设计的基础知识。这就是我在做的尝试,先铺垫设计的基础知识,然后,再讲DDD,用一个结构化的方式帮你把DDD串起来。 真正的难点是结合实际工作,把DDD完整地走一遍,看到代码就理解了。 退一步,可以去看《实现领域驱动设计》的源码。

    2020-08-01
    3
    10
  • 阳仔
    总结一下 理解DDD就要理解通用语言和模型驱动设计。 通用语言就是要把业务人员和开发人员对具体业务概念和逻辑的理解达成一致,可使用事件风暴和彩色建模等方法建立通用语言 模型驱动设计可以从战略设计和战术设计两方面入手,战略设计属于高层设计,将系统安装领域拆分;战术设计属于低层设计,考虑的是如何组合业务模型

    作者回复: 总结得好!

    2020-07-29
    7
  • 蓝士钦
    领域驱动设计可以和传统的面向数据库设计的方式结合吗,比如引入一个model模块用来聚合模型

    作者回复: 先按照一个思路走,否则,你会回到老路上去的。

    2020-07-29
    2
    6
  • Jxin
    1.各自阐述理解。 2.消除分歧。 3.达成共识。

    作者回复: 总结得好。

    2020-07-29
    2
    5
  • 人间四月天
    领域事件风暴,使用的是事件,动作,实体,建立基本业务模型,我认为这是时序图,状态图的另外一种表达,战略设计,很像业务架构设计,按照领域职责去划分。 建立一个好的平台,需要做好职责划分,配置团队,要不就是无尽的折磨。

    作者回复: 这个理解的角度是在新事物和已有知识建立起连接的角度,很有趣。

    2020-07-30
    2
    3
  • 加加林
    想请问一下,与业务人员交流,在互联网行业,传统的方式有文档以及用axure 高保真原型的方式向前后端开发人员甚至设计师展示产品的最终形态,尽量做到无遗漏无重复,怎么看待这种开发方式,或者说,互联网行业,与把传统行业信息化过程中的领域驱动设计的关系,和使用场景?

    作者回复: 这实际上需求层面,把需求澄清清楚,还不到软件设计。

    2021-04-11
    2
  • giteebravo
    老师,再推荐一些建立通用语言和设计领域模型的方法和工具吧。

    作者回复: 难道已经有了这么多,还不够吗?精通一样工具,就已经很厉害了。

    2020-08-14
    2
    2
  • 花落菩提
    领域驱动设计学起来比较难,真正将DDD落地的公司比较少,第一个是相关概念比较多,比较偏理论,可以参考借鉴的真实案例和代码相对较少,很多网上的案例介绍得都不够深入,代码也比较少。第二是需要业务、产品、研发配合去实践。 老师有没有推荐的DDD方面的案例,介绍得比较详细深入的,也有对应的代码可以参考学习的DDD的案例呢。

    作者回复: DDD也是有专栏的,可以看看

    2021-05-27
    1
收起评论
显示
设置
留言
21
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部