建模:设计和UML的那点事

设计的目的是什么?它和UML是怎样的关系?在程序猿(媛)的工作中,设计是如何开展的?
带着这些疑问,请各位在本文中细细品尝,相信大家能够从作者的思想中找到答案。

1.设计的目的

设计的目的在于从现实世界中发现问题,经过抽象转化,变成机器世界理解的需求,最终由软件程序来完成。

而设计的过程,我们期望是可以模型化的(可复用),而描述这个模型的方法,我们称之为建模语言。在百家争鸣的初期,建模语言超过50种。

2.设计与UML的关系

UML:Unified Model Language,统一建模语言。分久必合,建模语言经过多年的发展,逐渐向统一演进,UML逐步成为设计建模的首选方法。

上图是UML常用的几个设计图形,通过这几个图形,我们是如何完成设计建模的工作的?

3.设计建模三部曲

经典的设计建模过程是4+1模型,感兴趣的大家可以在网上查阅一下。本文中根据作者自身的设计经历,将设计建模过程稍作修改,变成上述三个过程:业务建模、领域建模、行为建模。

4.业务建模

业务建模一般指的是描述需求的模型,为了描述需求,我们需要重点把握两条主线:价值动机和价值假设。福特汽车创始人亨利福特说过一句经典名言“如果问用户要什么?那用户希望是更快的马车,而不是汽车”这句话说明了两个内容,需求是需要挖掘,而不是用户告诉你(这里需要挖掘需求的价值动机是更快的速度),另一方面则是在产品未开发之前,你需要领域专家来假设产品是能够满足需求的(这里的价值假设是汽车比马车更快),根据这两条主线,我们如何开展业务建模?

用例图是描述需求最常用的方法,此处忽略系统边界要素(作者认为这个不是很难)。

使用用例图描述需求首先需要识别产品的用户角色,然后根据用户角色来挖掘其价值动机,并赋予实际场景(功能)来假设满足角色的需求。同时还需要识别假设的场景(功能)对外部的依赖性,决策其是否可行(依赖因素越多,其代价越大,可行性越低)。

分享:京东需求模型是由市场评估需求的价值,由研发评估需求实现的成本,最终根据性价比来决定需求的优先级。

上述描述的业务建模中,经常会犯以下几个错误

1)描述功能,而不是描述价值。价值是能被直接理解的,而功能还需要进一步启发。例如一个查询告警的功能,对研发人员,它的价值是定位问题,对统计人员,它的价值是统计故障率。因此用例图中尽量描述价值。

2)过早细化需求。业务建模除了用例图,一般还可以辅助序列图、活动图来描述需求,然而这需要根据业务情况来分析,我们只需抓住一点:是否有利于识别价值?对于ERP系统来说,业务流程的每个节点都有重要的用户角色参与,则其辅助序列图描述对价值识别是非常有用的。对于一些整机产品来说,用户角色一般不知道产品内部的构造,因此细化需求大可不必。

3)用例图流程化。例如一个异常场景,会读取告警,再读取日志,那么则可以用一条语句描述清楚,或者辅助序列图、活动图来描述。不建议分出多个子用例来描述这个过程(它会对价值识别产生干扰,特别是用例比较多的时候)

5.业务模型转变开发模型

6.领域建模

上图描述领域建模过程主要从领域知识源(实际的对象),经过领域分析,最后转换成系统、包、类等分析模型(领域对象)。

本处作者的建议是多开阔眼界,学习已有的领域模型(例如分层架构、设计模式,帮后面的培训做个广告^_^),并思考这些领域模型是否可以解决我们的问题。

当前的领域模型经过多年的发展,工作中大部分的问题都能寻找到好的模型解决。因此作者更鼓励“微创新”,例如设计模式应用到解决问题中,这是“微创新”;多种设计模式组合应用,这是“微创新”;将已有的领域模型结合项目情况形成新的领域模型,这同样是“微创新”(作者曾经有过一个阶段,总想自己创造一个模型,借用一句话,简单的事情,想复杂了,最后觉得自己很低能-_-!)

7.行为建模

行为建模包括序列图、活动图,除此之外,作者还加入了状态图,这主要是因为如果没有交互关系模型的建立,需要直接识别出状态关系,会十分困难,而且容易出错(如果业务建模有流程图,则可以先识别状态关系)。

回到行为建模,在设计层次上一般分为概要和详细设计。但是工作中,往往觉得写两种设计比较冗余,结果会将两个层次的设计混在一起,实际上这是存在风险的,作者对这种文档的评价是基本没人看。

曾经有开发人员对设计人员建议“先别设计与xx系统的交互流程,现在还无法确定xx系统准备怎么做”,结果设计文档把内部的流程设计完了,空留下外部接口未设计。然后。。。就没有然后了,等xx系统的交互流程确定后,原来的流程也需要更改,但基本没人会返工修改,这篇设计文档经过设计、评审、归档等大量人力代价,结果变成一篇废文档。

对于这种现象,作者的建议是先在业务建模时确定好依赖关系,确定要不要做。确定要做以后,则在概要层面使用序列图分析好系统级别的交互关系,经评审确认可行后,最后进行系统内的详细设计。详细设计作者建议使用活动图,其灵活性更大,更易于描述细节。

8.心得

1) 实践出真理,设计能力的提升是基于不断的锻炼。曾经有位设计的同事说过“设计缺少的不是知识,缺少的是锻炼”。在工作中,程序员往往不被要求写设计文档,但这不是借口。作者过往接触到非常多的由SE完成的概要设计文档,但是作为特性的owner,作者有强烈的想法,想用自己的语言将其描述出来,因此形成了对应的详细设计文档。而这个过程就是不断的重复前面的过程,让自己的设计能力得到不断的锻炼提升。

2) 那些年我们追过的优秀设计,扩展眼界,站在巨人的肩膀才能看的更远。简单的看书是枯燥的,学以致用才能培养兴趣。(用不到怎么办?自己想办法创造,例如多和同学们沟通,到技术论坛上发帖,更多碰撞让眼界更开阔)

3) 时不时重温一下自己写过的设计,优化归纳,扎实的向上走。(这点真的很难,但是看到自己写的设计文档变成废物会让作者更加难受,正是这点强迫作者不断的更新维护自己写过的设计,而这个过程也是在不断的为自己创造锻炼的机会)



                                                    中生代技术分享群微信公众号

                                               

本文作者 鼎桥通信  符章文

时间: 2024-09-10 21:50:07

建模:设计和UML的那点事的相关文章

《为自己工作——世界顶级设计师成功法则》—第2章2.2节设计学院没有教你的事

2.2 设计学院没有教你的事 终身学习会让你对自己和自己的专业有更多的认识,但不幸的是,设计学院常常会忽视这些部分. 我召集了一些设计专业的研究生,让他们写下他们希望能在学校里学到的内容.下面这些是我认为在他们的反馈中最重要的,同时也是出现频率最高的内容. 2.2.1 有效沟通 "设计学院会教你如何与其他设计师沟通,但其实还需要有另外一套完整的课程来教授如何与非设计师沟通." --Stephen Lee Ogden 大多数客户都不理解你已经非常熟悉的那些专业设计内容,所以要避免使用行话

《面向对象分析与设计》一1.6关于统一建模语言UML

1.6关于统一建模语言UML UML最初是在多种面向对象分析与设计方法相互融合的基础上形成的,后来发展成为也可以用于业务建模以及其他非软件系统建模的语言.它于1997年11月被对象管理组织(Object Management Group)采纳为建模语言规范,随后被产业界和学术界广泛接受. UML定义了建立系统模型所需要的概念并给出了表示法,但它并不涉及如何进行系统建模.因此它只是一种建模语言,而不是一种建模方法.UML是独立于开发过程的,也就是说它可以适用于不同的开发过程. UML 2.4规范由

《UML用户指南(第2版.修订版)》—第1章1.1节建模的重要性

第一部分 入门UML用户指南(第2版.修订版) 第1章 为什么要建模UML用户指南(第2版.修订版)本章内容建模的重要性建模的4项原理软件系统的基本蓝图面向对象建模成功的软件组织应该总是能够交付满足其用户需要的软件.如果一个软件组织能够及时并可预测地开发出这样的软件,并能够有效地利用人力和物力资源,那么这个软件组织就是可持续发展的. 在上段话里有一个重要的含义:一个开发队伍的主要产品不应该是一堆漂亮的文档.世界级的会议.伟大的口号或者几行获得普利策奖金的源代码,而应该是满足不断发展的用户及其业务

PowerDesigner UML 建模简介(第一部分)

PowerDesigner UML 建模简介David Dichmann,PowerDesigner 产品经理,Sybase, Inc. 由于引入了 UML,PowerDesigner 8.0 支持使用例图.序列图和类图的面向对象分析与设计(OOAD).在即将发布的 9.0 版中,PowerDesigner 加强了对 UML 的支持,提供了活动图表和组件图表.改进了分析方法并增强了与开发过程的集成. PowerDesigner 能够帮助您构建适应现代 IT 发展的传统商务和电子商务系统,使用 J

uml-基于UML的学生宿舍管理系统的建模

问题描述 基于UML的学生宿舍管理系统的建模 基于UML的学生宿舍管理系统的建模 案例分析目标 本案例采用UML的方式对学生宿舍管理系统进行分析和设计,通过对学生宿舍的建模来对UML进行更加详细的了解和熟悉. 解决方案 http://wenku.baidu.com/link?url=NmE5LW1YDPZ4_ibjFPZPa5knhsNZDvjVADCxdLO_xbBfGEQj70u31i8ak3AotJQgRSnAjad_7fUEyPnCiZ2HGTVYs7JlgnbUBTxoMQCEmUq

面向对象分析与设计—四色原型模式(彩色建模、领域无关模型)

面向对象分析与设计-四色原型模式(彩色建模.领域无关模型) 1.背景介绍 至今我都清楚的记得我第一次被面试官问起什么叫"建模"技术时的情景,那是好 几年前的事情了,当时是胸有成竹的去面试一个有关系统分析.设计的.NET高级软件工程师岗位.面试官几乎没问我有关.NET方面的任何技术实现,他就简 单的问了问:"你如何把握你所分析出来的系统的正确性?",我当时有点小激动,觉得这个问题应该很简单嘛,都是概念而已,让他直接点问,结果他来一句: "你懂建模吗?,能给我

.NET应用架构设计—面向对象分析与设计四色原型模式(彩色建模、领域无关模型)(概念版)

阅读目录: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来其实我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙,让我们真的看见OOAD的希望 5.在四色原型上运用彩色建模增强视觉冲击力 6.通过四色原型模式建模出领域无关模型 7.结束语:建模时你可以不考虑具体实现,但是建模者要懂技术实现 1.背景介绍 至今我都清楚的记得我第一次被面试官问起什么叫"建模"技术时的情景,那是好几年前的事情了,当时是胸有成竹

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

《机器学习系统设计:Python语言实现》一1.2 设计原理

1.2 设计原理 我们经常拿系统设计和其他事物的设计进行类比,例如建筑设计.在一定程度上,这种类比是正确的,它们都是依据规格说明,在结构体中放置设计好的组件.但当我们考虑到它们各自的运行环境时,这种类比就会瓦解.在建筑设计上,通常会假设,当景观正确形成后就不会再改变. 软件环境则有些不同.系统是交互和动态的.我们设计的任何系统,诸如电子.物理,或人类,都会嵌入在其他系统中.同样,在计算机网络中有不同的层(应用层.传输层.物理层,等等),具有不同的含义和功能集,所以在项目中,需要在不同的层完成所需