为什么写这篇?
我想设计一个安卓,iOS或者Web应用的时候,开始做软件的步骤是什么,有个想法,做个需求分析,然后开始设计软件。这篇讲的是设计软件这一步。我想好了要做个什么,然后开始干了,不能撸起袖子开始一个接口一个接口写,一个界面一个界面开工。该怎么做一个整个项目的设计图呢?这篇主要想解决的是盖楼如何有个基本图纸。
为什么建筑师要画图纸?
UML是当时上大三的时候的一门课,印象比较深,这是一门选修,没几个人交作业,让花一打UML图,没几个人交作业。为什么没几个人交作业呢?大部分人对于为什么要花UML图没什么概念,如同让不盖楼的人去画一份图纸。为什么建筑师要画图纸是一个好问题,因为人人可以摞起石头却不能盖起摩天大楼。UML图是成千上万的工程师积累盖楼的经验总结的图纸。首先我需要盖一座大楼,所以我需要画一份图纸。大部分人停留在摞石头的状态所以自然画不好几张UML图。当自己需要设计一个自己的软件的时候,自然需要这么一份图纸。
有其形无其实,有其实无其形
当时印象比较深,时常很纠结UML该用那个箭头,用圆的还是用方块。其实这个东西感觉也不用那么纠结,能背下来那么一套复杂的标准自然好,在几百人合作的项目中可能确实需要这种规范,但是小项目可能并不用那么精细,能符合固然好,不能那么细致也是可以接受的,不要太拘泥于此细节。就和倚天屠龙记里面,张三丰问张无忌忘了吗,很多事情在于有其实无其形,如果生搬硬套全把精力花费在用那个三角方块上可能反而背离了初衷有其形而无其实。下面写的是一个思路,其实需要了就花画不需要也可以不画。UML其实从另一个方面告诉我们如何开始设计自己的软件。
五个大部分
用例图
用例图是核心,为什么用例图最重要,用例图是用户的使用过程,哪怕你懒到一定地步后面的图都不花也应该花一张这个。你一定要用这张图描述明白,谁干了什么,第一步是什么,第二步是什么。你做这个东西要解决一个什么问题。Use case View:对系统用例进行描述,典型的视图为用例视图(use case diagram)。
静态图
这部分主要描述静态的关系,对象图,类图,这个讲的是开发过程中的抽象。Logic View:对系统各个组成部分进行抽象描述,其焦点在于系统是如何构成的以及构成系统的各个部分之间是如何互动的。我们常用的类视图(class digram),对象图(object diagram),顺序图(sequence diagram)/通信图(communication diagram)都属于Logic View。
动态图
描述的是各种状态。Process View:描述系统中的各种活动,典型的视图为活动图(activity diagram)。个人认为活动图和流程图非常类似,且目的都是为了将系统中的活动描述清楚。
部署图
这个有利于自己部署好这个系统,从0.1到1.0到2.0如果进行部署。这块可以写清楚如何部署,是直接部署,部署在几个机器上部署,用虚拟机,还是docker,如何理清楚部署过程进行自动构建。Development View:从开发者的角度描述系统的构成,典型的视图为构件视图(component diagram)。
物理图
Physical View:该视图关注软件构件在硬件上的top结构,以及构件之间的通信。典型的视图为部署视图(deployment diagram)