在小公司做事的好处是终于可以眉毛胡子一把抓,来个全栈式控制,好吧,人人都有控制欲。
商业项目中的上游设计一旦展开,UML设计变成一个巨大的工程,每个设计者都被淹没在UML中一根根线条,标记符号,颗粒度的大小争论,optional flow的全与不全,DB ER图上字段的正则等等细节之中,这样的设计往往会要三个月,大规模项目甚至6个月。
从Agile,Scram开始,个人的观点UML完全可以简化下来,收缩在概要层次,然后在开发中细化或者也不一定去细化修改。
简要归纳一下UML最小配置。
UML的关键点是要有映射关系,如同辞典一样可以互相检查,保证可以追踪。
Usecase:
一般USECASE的文字记录足够了,因为图形还不如用业务流程图去表示更清晰一些。
UC是对业务流程的归纳总结,是概要设计的基础和源头,包含了客户的要件内容(非性能要求不算)一般和客户的IT部门沟通业务细节,主要靠UC。(UC技巧和注意事项在此不赘述,教科书太多)
UC中可以标记出页面和BusinessRule,为后面的详细设计做准备。
页面是User Interface的重要部分,通常页面的wireframe 设计在概要设计阶段都会给出,这样才能和没有IT经验的客户做比较顺畅的沟通。
BR是详细的业务逻辑实现,一般仅对比较复杂的业务计算逻辑做BR,例如有算法实现或者业务逻辑细节非常复杂,或者要调用其他子系统进行实现。
Sequence图:
UC之后可以写Sequence图,在sequence 图中非常重要的是需要识别object, 在MVC模型中则分为boundary, control and entity, 这些object 是今后类图设计的基础,中大型项目分为概念时序图和分析时序图,概念时序图是给出概要Object,而分析时序图中Object位置则出现的是实际的class 图,和类图要一一对应。
此处的object识别将作为后面类图设计的依据。
Class图:
可以直接写静态类图设计,但也可以一边做时序图的分析模型一边将类中的method/function 剥离分析出来,再填入类图,这样可以保证关键的方法函数被包含。 类图是详细设计,设计过于繁琐细节,会妨碍开发,或者说这部分其实应该由开发人员在开发中完善。
动态生成类图文档可以直接将这步覆盖,但是对于类的分类和粒度选定,确实一定要在设计过程中定下。
通常Object可以是Classe图中的父类、基类、抽象类的基准。
BR:
BR(business rule) 需要在分析时序图中和类方法函数标注对应,基本确定下来在什么类中实现哪部分BR,因为类的重用设计和BR放在何处有紧密联系,如果做得不够好会导致大量代码的拷贝,重复写。
BR当中需要break down 的是: API (调用外部接口) 和 Message (和其他子系统通讯)
有些项目会另外做个对API和Msg的汇总,便于倒过来检查。
页面设计+迁移图:
页面设计非常重要,这部分是和客户沟通的基础,而数据又和背后的数据库,数据模型连携。
页面的wireframe 将页面功能基本理出来。这部分页面设计和美工无关,主要是功能性整理,并要决定有些页面状态更新是否会向后台传送数据,在前端技术发展迅猛的当下,很多功能处理在前端完成,因此这部分的设计需要前端开发经验。
页面设计+页面迁移图,完整说明客户界面和流程。
状态迁移图:
对于一些和流程相关的程序,需要专门写一下状态迁移图,并定义状态标志,这些标志有的是中间暂时状态,数据在过程中被销毁,有的则需要计入数据库或者数据模型以便于跟踪。
状态的标志要和各个类中的关键属性以及DB的字段做好对应。
数据库ER图:
这部分是对前面的综合概括,通常ER和类图有映射关系,POJO,OR映射关系反应了这种关系,MVC模型也被流行很久,但除此之外,要考虑batch 对数据库的修改,但这些通常可以看做是后台操作。
项目的估算:
估算是门非常古老的艺术,对,我说的是艺术,不是技术。
综上所述,开发工数估算应该包含:
类的开发工数估算(包括BR的复杂度)
页面复杂度,包括页面迁移带来的batch 实现难度
外部接口调用复杂度
外部通讯msg 的复杂度
测试一般以比例计算,但是系统间测试最好单独考虑一下。
所谓估算的艺术,是要在以上逻辑性的考虑上再考虑一下客户的预算,横向的比较,此处不做赘述。
为什么需要UML?
对于业务应用的开发,UML是业务层和技术开发层的桥梁,也可以防止功能的遗漏,以及功能需求的暧昧,最终落实到技术语言层面。
对于一些Framework型的项目,最重要的是做好接口的整理。
从技术角度出发的人,可能是从类图的topdown设计开始,而UML是从业务角度,客户需求角度的视角开始。
如何简化UML?
1)BR如果可以独立让开发人员定下来,可以省略,或者仅做简单的标识。
2)关键method 和属性之外,可以省略
3)分析时序图可以省略,仅留概念时序图
4)DB的ER图可以过后补全,但是基本框架要在
5)可以在页面表示的一些机能以及动态联系,可以在时序图和UC中写得较为省略