《软件方法(下)》第8章2023版连载(03)本书使用的分析方法以及自测题

本文讨论了领域驱动设计中的分析工作流,强调了使用面向对象的建模概念,如类图、状态机图和序列图,来描述核心域知识。文章指出,尽管实现技术各异,面向对象分析方法仍是最佳选择,并提醒避免掩盖复杂逻辑的借口。最后,提供了自测题目检验理解程度。
摘要由CSDN通过智能技术生成

DDD领域驱动设计批评文集

做强化自测题获得“软件方法建模师”称号

《软件方法》各章合集

8.1 分析工作流概述

8.1.7 本书使用的分析方法

分析模型描述系统要封装的核心域知识。

用什么建模概念来思考和描述核心域知识,可以有很多种选择。例如,“人”用不同的建模概念描述,可以说它是一个“类”,也可以说它是一个“类型”、一个“实体”。

本书使用面向对象的建模概念来描述分析模型,从三个视角来描述:

分析类模型:描述系统中各个类以及类之间的关系。

分析状态机模型:描述某个类的各个行为的逻辑。

分析交互模型:描述某些类在实现某个用例时的协作。

面向对象的分析模型的表达形式,也可以有多种选择,包括语音、文本、图形等。

回忆一下我们在学生时代做阅读理解题和听力题的过程,就可以体会到,相对于听觉,视觉传递信息的效率更高,而且可以传递更复杂的信息。因此,相对于语音,把模型表达成视觉信息是更好的选择,不管是文本还是图形。

提醒:如果有人特别推崇“口头交流”,排斥文档或图形,很可能是遮羞布,背后的脓包是此人没有能力剖析复杂逻辑。

相对于只有自上而下顺序的文本(包括自然语言和编程语言),能够朝四个方向扩展的平面图形(如果有三维模型就更好了)更容易让建模人员看出领域概念之间的联系。例如,图8-15和图8-16的内容,如果没有图形的帮助,直接用文本一行一行地构造和阅读模型,人脑的负担非常重。

图片

图8-15 餐饮领域的类图

图片

图8-16 计算器的状态机图,摘自Practical UML Statecharts in C/C++(Samek M. , 2008) 

说到这里,又不可避免地要提醒,故意选择文本的形式来表达领域知识,有可能也是一种遮羞布。图8-15和8-16的内容如果用文本表达,可能会得到很多页文本——这就有了理由:因为工作量太大了,所以很多地方无法做深入的思考,可以原谅! 

本书使用类图、状态机图和序列图三种UML图形来表达面向对象的分析模型。

UML类图表达分析类模型,UML状态机图表达分析状态机模型,UML序列图表达分析交互模型。

图片

图8-17 本书的分析方法所使用的UML图形

需要说明的是,虽然我们用的是面向对象的分析方法,也就是说,用面向对象的概念来剖析核心域知识,但不意味着你的系统一定要用特定的“面向对象”编程语言、特定的存储方式或物理分布形式来实现。

也许你使用的编程语言是面向过程语言,例如C;也许你使用的编程语言是函数式语言,例如F#;也许你使用的存储系统是关系数据库系统,例如SQL Server;也许你使用的存储系统是非关系数据库系统,例如MongoDB;也许你的系统运行在同一台机器上,也许是分布在很多台机器上……

不管你的系统的实现方式和运行形态如何,从分析过渡到设计时,变化的只是分析到设计的映射套路。如果设计所使用的非核心域比较“面向对象”,那么映射套路会比较直观一些,否则,就需要一定的转换。但无论如何,如前文所说,这个套路和具体的核心域知识没有关系,我们并不需要针对每一个核心域概念逐一花费脑力去思考它。

我们之所以选择在分析工作流使用面向对象的分析方法,是因为从思考深度和表示的严谨程度来看,面向对象的分析方法以及UML表示法目前仍然是剖析和整理核心域逻辑的最佳选择。

本书在设计工作流的内容,会展示分析模型和各种实现方式的映射套路。

8.1.8 自测题

扫码或访问http://www.umlchina.com/book/quiz08_01.html完成在线测试,做到全对以获得答案。

1[多选]

关于分析和设计的区别,以下说法不恰当的有:

A) 分析着眼于“系统做什么”,设计着眼于“系统怎么做”。

B) 分析和设计分离的好处是,先全局思考整个系统的各个类以及类之间的关系,再有规律地映射到实现的平台和语言,这样就减少了反复试错的成本。

C) 有时候,在分析工作流也会考虑内存、网络带宽等概念。

D) 分析注重业务,设计注重技术。

2[单选]

掌握MVC、MVP、MVVM、六边形、洋葱型……等模式或架构,并不能解决分析的问题,原因是:

A) 它们描述的是域之间的协作。

B) 它们没有得到广泛使用。

C) 它们没有体现面向对象的思想。

D) 它们不够敏捷。

3[单选]

第一款CASE(计算机辅助软件工程)工具是:

A) Rose

B) ERwin

C) FlowChart/360

D) DesignAid

4[多选]

本章中目前为止提到的在分析时逃避思考遮羞布有以下哪些?

A) 不使用UML的类图和状态机图。

B) 谈论性能问题。

C) 抱怨免费或便宜的建模工具太弱,要求购买更贵的建模工具。

D) 引入微服务架构以简化核心域逻辑。

5[多选]

以下说法正确的有:

A) 分析模型就是用核心域术语表达内容的模型。

B) 分析模型概要地描述核心域知识,设计模型将核心域知识细化。

C) 面向对象的分析模型不妨碍使用面向过程的设计。

D) 口头表达也可以表达分析模型。

6[单选]

有一篇文章,作者在白板上画了一个类图,然后开始掰着指头数这个类图缺什么,"没考虑到持久化","没考虑到对象的创建"……然后得出结论:画这个类图不如直接编码。根据本节的知识,以下正确的说法是:

A) 作者不了解核心域和非核心域分离的重要。

B) 别急,这个图会越来越细,逐渐添加作者认为缺少的那些东西。

C) Talk is cheap. Show me the code.

D) 敏捷是建模的精髓,加上这些就不敏捷了。

7[多选]

以下系统中,适合用面向对象的分析方法建模核心域逻辑的有:

A) 电磁轨道炮武器控制系统

B) 互联网拼单购物系统

C) PC单机角色扮演游戏

D) 电梯控制系统

8[多选]

以下系统中,适合用面向对象的分析方法建模核心域逻辑的有:

A) 用SQL存储过程来实现核心域逻辑的企业应用

B) 用C语言实现核心域逻辑的嵌入式应用

C) 用JavaScript实现核心域逻辑、读取本地文件,不需要服务器的小游戏

D) 在微软Azure上运行的企业应用

9[多选] 

以下系统中,适合用面向对象的分析方法建模核心域逻辑的有:

A) 火箭发射控制系统

B) 函数式语言的编译器

C) 视频剪辑软件

D) 关系数据库管理系统

[架构师强化]10月9-11晚8点企业应用架构模式新解-网络公开课

[3级(片?)]类的精细建模高阶-10月16-18晚8点网络公开课

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值