软件设计之美
郑晔
推文科技技术VP,前火币网首席架构师
立即订阅
3458 人已学习
课程目录
已完结 36 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 软件设计,应对需求规模的“算法”
免费
课前必读 (3讲)
01 | 软件设计到底是什么?
02 | 分离关注点:软件设计至关重要的第一步
03 | 可测试性: 一个影响软件设计的重要因素
了解一个软件的设计 (4讲)
04 | 三步走:如何了解一个软件的设计?
05 | Spring DI容器:如何分析一个软件的模型?
06 | Ruby on Rails:如何分析一个软件的接口?
07 | Kafka:如何分析一个软件的实现?
设计一个软件—程序设计语言 (5讲)
08 | 语言的模型:如何打破单一语言局限,让设计更好地落地?
09 | 语言的接口:语法和程序库,软件设计的发力点
10 | 语言的实现:运行时,软件设计的地基
11 | DSL:你也可以设计一门自己的语言
加餐 | 再八卦几门语言!
设计一个软件—编程范式 (9讲)
12 | 编程范式:明明写的是Java,为什么被人说成了C代码?
13 | 结构化编程:为什么做设计时仅有结构化编程是不够的?
14 | 面向对象之封装:怎样的封装才算是高内聚?
15 | 面向对象之继承:继承是代码复用的合理方式吗?
16 | 面向对象之多态:为什么“稀疏平常”的多态,是软件设计的大杀器?
17 | 函数式编程:不用函数式编程语言,怎么写函数式的程序?
18 | 函数式编程之组合性:函数式编程为什么如此吸引人?
19 | 函数式编程之不变性:怎样保证我的代码不会被别人破坏?
加餐 | 函数式编程拾遗
设计一个软件—设计原则与模式 (7讲)
20 | 单一职责原则:你的模块到底为谁负责?
21 | 开放封闭原则:不改代码怎么写新功能?
22 | Liskov替换原则:用了继承,子类就设计对了吗?
23 | 接口隔离原则:接口里的方法,你都用得到吗?
24 | 依赖倒置原则:高层代码和底层代码,到底谁该依赖谁?
25 | 设计模式:每一种都是一个特定问题的解决方案
26 | 简单设计:难道一开始就要把设计做复杂吗?
设计一个软件—设计方法 (3讲)
27 | 领域驱动设计:如何从零开始设计一个软件?
28 | 战略设计:如何划分系统的模块?
29 | 战术设计:如何像写故事一样找出模型?
巩固篇 (3讲)
30 | 程序库的设计:Moco是如何解决集成问题的?
31 | 应用的设计:如何设计一个数据采集平台?
32 | 应用的改进:如何改进我们的软件设计?
结束语 (1讲)
结束语|那些没讲的事儿
软件设计之美
15
15
1.0x
00:00/00:00
登录|注册

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

郑晔 2020-07-29
你好!我是郑晔。
在前面的内容中,我给你讲了软件设计的各种基本工具。我们学习了程序设计语言,知道怎样把设计更好地落地;学会了各种编程范式,知道了可以用什么样的元素去做设计;我们还学习了设计原则与模式,知道了怎样组合分解出来的各个元素。
工具都有了,理论也武装上了,那么我们该如何实践呢?或者说,我要去分解组合的东西是从哪而来的呢?这就需要你对设计方法有一个基本的认知了,也就是说,我们要理解,在真实世界中,解决具体问题是怎样的一个过程。
那从这一讲开始,我们就来谈谈设计方法的话题,一起了解一下设计的基本过程。
首先,你知道哪些设计方法呢?
我知道的一种做法是,有些人一上来会先设计数据库,因为他们觉得,程序就是数据加函数。数据呢,就要存到数据库里,剩下的就是根据需要对数据库表进行增删改查。但是从我们之前的讲解中,你可以看出,这种思路实际上是一种结构化编程的思路。
后来有人就用面向对象的思路,先来找实体,也就是对象,当然这些实体也要有一些能力。最终,这些对象还是要写到数据库里,同样也是要提供增删改查的能力。
你看,这两种做法本质上没什么太大的区别,都是围绕着数据在做文章。在业务需求不复杂的年代,围绕数据做文章的做法还能满足开发的要求,但随着软件日益深入到人们日常工作和生活中,软件变得越来越复杂,这种做法就越发显得笨拙了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《软件设计之美》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(9)

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

    作者回复: DDD其实不是难,而是概念多,缺乏一个结构理解它。另外,很多人欠缺的不是DDD,而是设计的基础知识。这就是我在做的尝试,先铺垫设计的基础知识,然后,再讲DDD,用一个结构化的方式帮你把DDD串起来。

    真正的难点是结合实际工作,把DDD完整地走一遍,看到代码就理解了。

    退一步,可以去看《实现领域驱动设计》的源码。

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

    作者回复: 总结得好!

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

    作者回复: 学会抢答了😄

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

    作者回复: 总结得好。

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

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

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

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

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

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

    2020-07-30
    1
  • 小学一年级
    数据加函数用了好多年,现在终于想通了为啥 EF 有种 codefirst编程模式, 因为别人早就想通了 面向对象编程!!!
    2020-07-29
    1
  • Harry

    老师,再推荐一些建立通用语言和设计领域模型的方法和工具吧。
    2020-08-14
收起评论
9
返回
顶部