系统设计时先画用例图还是流程图
最近在做系统设计时,在开始之初总是会纠结是先画流程图还是先描述用例图?
先画用例图,好像无法一下子把握到系统比较明确的职责?
先画流程图,看起来容易把握了系统职责,但感觉好像是跳过了一些东西直接进入到了细节之中?
举个例子
对于上述问题,可能不能一下得到答案。那么我们拿战争来思考一下,如何系统去做。直觉式的思考过程:
终极目标: 扩张获取更多的资源。
战略: 分阶段打造强大的基础能力(经济和军事实力)。
分工: 设立合适的组织,统一认识,实现分解的小目标。
当然战争是一个很复杂的过程, 我们这里只是举个例子感受一下我们直觉式的思考过程。
为什么要使用总分?
从战争的例子来看,我们采用了一个总分的结构。为什么呢?
抛开用例图和流程图的问题,在面对一个比较庞大的信息量时,由于人对信息量处理能力的限制,只能同一时间处理少量的信息。在这种情况下,
就需要有逻辑的结构来搭建信息的架构。这样就可以顺着脉络,像XML的解析工具SAX
的stream流一样,每次只处理少量的信息,最终掌握
庞大的信息量。而这种脉络结构,是需要由总到分,由粗到细,由抽象到具体的层次结构。
题外话: 如果这种模式称之为总分结构,那么分总结构由适合在什么地方呢?
说到分总,最容易想到的就是由浅入深地学习,像"盲人摸象"地方式渐进地认识事情的全貌。
我的观点是总分模式是用来架构信息的脉络,而分总是用来认识已经架构好的信息。
回到话题
首先还是让我们回答一下用例图和流程图的职责。
用例图回答的是做什么的问题。
流程图回答的是怎么做的问题。
结合上述的总分结构,那么我们就可以简单地推理出: 应该先用例图,后流程图。
那么当用例图感觉不好把握,思路不清晰问题应该如何解决呢?
在面对复杂的软件情况下,可以结合多种设计方法
TOGAF
,C4
,DDD
进行思考
当感觉无法理解用例图
应该有哪些内容时,我认为会有两个原因:
-
描述的是过于细节,比如是C4的系统上下文之类的用例图。用例图不单纯,包括了系统边界的内容。
-
本质来说,用例图并非是逻辑起点,所以也会存在层次过低细节过多的问题,需要向上寻找更核心更本质靠近逻辑原点的概念及流程,比如业务价值流、基础能力和组织。
结语
就感叹一下,难得有时间也能坐下来想一些感兴趣的问题,忙中偷闲的好时光~