201706 DDD DSL Course Introduction - xiaoxianfaye/Courses GitHub Wiki

1 Goals

DDD —— Domain Driven Design 领域驱动设计

DSL —— Domain Specific Language 领域特定语言

本课程的主要目的有两个:

  1. 引导学员重新深入思考以下几个与软件设计密切相关的问题:
  • 什么是设计?
  • 什么是好的设计?
  • 如何做出好的设计?
  • 如何提升设计能力?
  • 重新思考什么是编程?
  1. 通过一小一大两个设计实战帮助学员在实践层面更深入地理解上述理论。
  • 求任意n个自然数的最大公因数和最小公倍数
  • 计量系统

2 Contents

2.1 Let's Talk About Design

在以往的培训学习中,老师传授过很多关于软件设计的知识和技能。这次我想结合自己的思考理解和实践体会谈一谈以下几个与软件设计密切相关的问题:

  • What is Design?
  • What is Good Design?
  • How to do Design?
  • How to improve Design Capability?
  • What is Programming?

 

  • 授课PPT请见《201706-Let's Talk About Design.pptx》。
  • 授课讲义请见《201706-Let's-Talk-About-Design.pdf》。

2.2 Design War - GCD & LCM of Natural Numbers

求任意n个自然数的最大公因数和最小公倍数。这个题目来自于小学四年级奥数。

数学求解步骤是:

  • 将n个自然数逐个分解质因数;
  • 从这n个自然数的质因数中取出共同质因数,将这些质因数的最小次幂运算的结果乘起来得到这n个自然数的最大公因数;
  • 从这n个自然数的质因数中取出所有不重复的质因数,将这些质因数的最大次幂运算的结果乘起来得到这n个自然数的最小公倍数。

在用计算机解决这个问题的过程中:

  • 提取统一过程,分离计算的描述与执行,最终解释执行;
  • 将“从n个自然数的质因数中取出共同质因数”映射到“求数学集合的交集”;
  • 将“从n个自然数的质因数中取出所有不重复的质因数”映射到“求数学集合的并集”。

 

  • 授课PPT请见《201706-Design War-GCD & LCM of Natural Numbers.pptx》。
  • 授课讲义请见《201706-Design-War-GCD-LCM-of-Natural-Numbers.pdf》。

2.3 Design War - Measurement System

这道题就是老师曾经讲过的计量系统的题目。题目内容比较多,就不写在这里了。

之所以选这道题,是因为我曾经在部门讲过这道题,学员反响非常好。当时也是提前把题目发给大家,绝大多数人都是用OO的方法做的。当天培训结束后,很多人都对什么是好的设计有了重新的认识。

另外,我没有机会听过老师完整地讲解这道题,当时开发课程时,向老师请教了不少具体的问题,我想把这些内容也融合分享,形成了一个完整的设计实现。

 

  • 授课PPT请见《201706-Design War-Measurement System.pptx》。
  • 授课讲义请见《201706-Design-War-Measurement-System.pdf》。

3 Features

  1. 提前2周,将两道实战题的题目发给大家,让大家自己先做;
  2. 课时2天:
    • 第1天:Let's Talk About Design、Design War - GCD & LCM of Natural Numbers
    • 第2天:Design War - Measurement System
  3. 可根据学员能力选择Erlang、Java 8或Python语言授课;
  4. 测试驱动开发(TDD)。
  5. 设计了作业。

4 Code

  1. 关于代码,请参见各个设计实战目录的Code子目录。
  2. 目前实现了Erlang、Java和Python三种语言版本。
⚠️ **GitHub.com Fallback** ⚠️