一、背景
大家应该在从事软件开发领域工作时间有一段时间之后,就开始有画图的意识,不管是懵懂的学别人还是想更好的让其它人理解自己的一个观点。所谓“一图胜千言”,我们身处于软件开发这个水很深且要求精确的复杂领域里,要想把事情做好,最基本的是要把事情想明白,其次还要让相关的人能够明白你要说的东西,进行协作。
特别对于一位架构师来说,能否画得一手好图尤其重要,因为相关的干系人数较多,要让不同领域的人能够达成一个统一的认识,是一件不太容易但也是必须要做好的事情。
二、图为了解决什么问题
软件开发涉及的流程是:需求 --> 开发 --> 测试 --> 发布上线。
作图本身是个设计的工作,是个前期工作。那么从软件开发的整个生命周期来说,用到的图的地方是在前期的需求、开发阶段较多。在软件开发这个非常抽象的领域,只要涉及到多人协作,那么通过文字来进行交流叙述是非常晦涩难懂的,需要沟通好几遍才能理解达成一致也是比较常见的情况。那么我们画图,就是为了把不适合用言语表述的内容通过作图的方式呈现出来,让相关协作者有一个共同的具象的参照物。这个参照物可以有它的额外价值,是对软件长期价值的延伸,一份一致、清晰的设计图,可以给后续的软件迭代提供非常有帮助的决策依据。当然保证设计图与系统的一致本身也是件费精力的事情。
三、不同流程中适合运用的图
1. 用例图
用例图是UML交互图中的一种,是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(User Case)是外部用户(被称为参与者,一般为软件的面向用户)所能观察到的系统功能的模型图。
适用场景:当新做一个产品或者功能的时候,首先需要明确核心方向,用例图就是整理这个核心方向的工具。它用来说明的是谁要使用系统,以及他们使用该系统可以做些什么。可以理解为是MVP思想的写照,去除画龙点睛的功能,这些就是基础、核心。
缺点:仅仅描述的是提供什么功能,不能表达非功能需求,如可靠性、性能等非功能需求。
2. 鲁棒图(Robustness Diagram)
可能英文名Robustness Diagram更为常见一些,用于衔接用例图之后的设计,识别出系统在用例图中的各种职责,对后续的细节设计提供基础。算是对用例图的一种延伸。
适用场景:在确立用户场景之后,如果需要将关键功能设计出来,那么就需要它了。作图过程中最关键的2个点,发现职责,和梳理各个职责之间的关系。
缺点:和用例图是一样缺点,唯一的变化是,其有了粗粒度的实现层面的内容。
3. 思维导图
思维导图是一个很厉害的发明,他将我们的思考过程具象化了,完美展示了由点到面不断发散的过程。但是它最大的价值,反而不是最终呈现出来的这个图,而是促进了思考的过程。并且需要注意的是,一定要把一条分支走到尽头,再回过头来走其它的分支,把思想榨干。
适用场景:在一个事情刚开始的萌芽期,不知如何下手;或者陷入一个困境的时候。利用思维导图来活跃大脑,进行发散思维。这时候如果结合头脑风暴,效果更佳。
缺点:它是一种树状的信息分层可视化展视,结构比较固定,不适合分支间互相交互比较复杂的信息展示。
4. DFD(Data Flow Diagram)图
DFD图是从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。
适用场景:在将思维导图得出的东西进行整合、梳理形成一个粗粒度的流程。这个其实类似与DDD中的上下文映射图,是在需求分析过程中做宏观设计的一种方式。
缺点:反映系统“做什么”,不反映“如何做”,粒度算是中等,需要其它更细粒度的图来对细节做支撑。
5. 流程图
上面贴了2张图都是流程图,流程图有时也称作输入-输出图。该图直观地描述一个工作过程的具体步骤,各种操作一目了然,不会产生“歧义性”,便于理解,算法出错时容易发现。流程图对准确了解事情是如何进行的,以及决定应如何改进过程极有帮助。大到系统级别、小到某个操作背后的运转逻辑都可以使用流程图来画,我个人认为这应该是被最多人认识的图,没有之一。
适用场景:正如上面所说这个适用场景比较广,日常工作中小到算法逻辑,大到战略层面的执行落地都需要它。主要用它来将背后的流程可视化,辅助做决策去(如改进等)。
缺点:所占篇幅较大,由于允许使用流程线,过于灵活,不受约束,使用者可使流程任意转向,从而造成程序阅读和修改上的困难,不利于结构化程序的设计。
6. UML类图
UML类图是UML交互图中的一种,也是我们较常见的一种。类图是描述系统中的类,以及各个类之间的关系的静态视图。它不但是设计人员关心的核心,更是实现人员关注的核心。
适用场景:一般作为编码前做的最后一步,将设计转为相应的模型。也可以使用Code First的方式直接在项目中建模,现在的VS也支持直接从代码中生成UML类图。
缺点:缺点就是画起来太费时间了,但反过来其表达的粒度更细致,是代码实现级别的内容。由于现在有比较多的工具可以从代码生成UML类图,甚至在大部分提倡使用Code First的场景下,我们画UML类图的机会是越来越少了。
7. 状态图
状态图是对类图的补充。描述类的对象所有可能的状态,以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。
适用场景:当有一个对象拥有多个状态的时候,想要表达清楚状态之间的演变关系(也就是这个对象的生命周期)。比如通过什么条件触发状态变动的,到达某个状态之后会做什么动作等。这也是基于事件驱动设计的良好可视化图。
缺点:仅能表达行为/事件与状态之间的演变关系,不适用于其它领域。
8. E-R图
E-R图提供了表示实体型(Entity)、属性(Attribute)和联系(Relationship)的方法。其中最核心的还属联系(Relationship)的表示。
适用场景:虽然在UML类图中,也可以体现出聚合、依赖等关系。但是如果相关联的模型数量巨大的话,你会发现看起来特别费劲,要缩的很小才能看清全貌。这时候你需要E-R图出场了。
缺点:相对类图来说,E-R图无法定义类/实体的行为。它更面向数据库而不是代码。
9.UML时序图
时序图也是UML交互图中的一种,是描述对象是如何交互的,并且将重点放在消息序列上。也就是说,描述消息是如何在对象间发送和接收的。时序图有两个坐标轴:纵坐标轴显示时间,横坐标轴显示对象。
适用场景:一般当我们想反映一个包含顺序的交互流程,比如http请求的生命周期、页面上某个按钮背后流转细节等情况时,就需要它了。
缺点:一个时序图仅能面向一个Case,同时画起来比较费时间。
四、实际的运用
其实上一节中图的顺序就是按照由层次从高到底,粒度从粗到细规划的。我们可以用用例图来确定用户核心需求,再用Robustness Diagram定义好关键功能,随后在关键功能的实现上通过思维导图进行发散,然后用DFD图把粗粒度的内容串起来,至此大体的设计工作算是完成了。
然后再通过流程图、UML类图、状态图、E-R图、时序图在不同的场景确定细节实现。最终就是Coding的事情了。
至于每个图绘画的规范网上资料比较多,这里就不赘述了。如果大家有什么疑问继续交流。
五、结语
其实最好的图是手稿,不但画起来快,还能让你的思维专注到构思上,用什么颜色之类的问题不会对你产生干扰。另外我们不要为了画图而画图,结合实际的情况把握好尺度,一般情况下,时间上不太会允许我们把图画的面面俱到,能覆盖到核心甚至80%就很好了。
载自:windy
力软敏捷开发框架
相关推荐
### 工程地质勘察软件开发中的数据录入与图例制作技术初探 #### 一、引言 在当今数字化时代,工程地质勘察软件已经成为岩土工程领域不可或缺的工具之一。这些软件不仅能够帮助工程师们高效地收集、分析数据,还能...
"自动化机构设计构思实用图例" 提供了一套宝贵的参考资料,旨在帮助工程师和设计师们理解和应用自动化技术于工厂自动化(FA)环境中。这一资源包含了一系列的实际设计示例,能够激发创新思维,提升设计效率。 自动...
绘图中进行图签生成,图例生成,方便实用,便利
在实际应用中,这些图例符号会结合GIS软件(如ArcGIS、QGIS等)进行使用,通过导入符号库或样式文件,地图制作者可以快速、一致地绘制出具有专业水准的村庄规划图。同时,这些图例符号也有助于非专业人员理解规划...
GIS(Geographic Information System,地理信息系统)是一种集成了地图绘制、数据分析、空间查询等功能的软件技术,用于处理与地理位置相关的数据。ArcEngine是Esri公司开发的GIS开发平台,它提供了一整套API,允许...
UML(Unified Modeling Language,统一建模语言)是一种面向对象的可视化建模语言,用于软件设计和开发过程中对系统的建模和分析。UML提供了9种图例,分别是:用例图、类图、对象图、活动图、状态图、顺序图、协作图...
Tooltip是一种常见的UI元素,当用户将鼠标悬停在某个元素上时,它会显示额外的信息。jQuery插件使得创建自定义Tooltip变得简单易行。例如,“jQuery Tooltipster”是一款功能强大的插件,支持多种样式和动画效果,...
6. **图例样式管理**:"林业图例.style"文件是一种保存图例样式的文件,可以在多个项目中重复使用,避免了重复创建和修改图例的工作。用户可以导入、导出和共享这些样式文件,提高工作效率。 7. **动态图例**:...
XMind是一款功能强大且实用的可视化思维导图(Mindmap)软件,具有丰富的模板和多种实用的功能。然而,许多用户对图例的添加和应用还不是很熟悉。下面将介绍XMind图例添加使用方法,以帮助用户更好地使用XMind软件。...
县界图例会详细说明这些符号的含义,以便用户能够准确地识别和分析这些边界。 ArcGIS,全称为ArcGIS Desktop,是由Esri公司开发的一款强大的地理信息系统软件。它广泛应用于地图制作、数据管理和空间分析。在水利...
在GIS(地理信息系统)领域,ArcGIS是一款广泛使用的专业软件,尤其在水利、环境、城市规划等众多领域中,它的地图图例设计功能是至关重要的。"ArcGIS 水利地图图例"是一个专为展示水利信息而设计的地图元素集合,它...
在GIS软件中,如ESRI ArcGIS这样的平台提供了丰富的API,允许开发者根据具体需求进行定制化开发。自定义图例不仅能够增强地图的可读性,还能提高用户体验。例如,在某些情况下,用户可能希望改变图例的样式、位置...
实用的安防监控图例大全,超清晰,各种图标都有,网络,外设,监控,辅助,计算机,服务器,显示器,通信传输,入侵报警,前端设备,门禁,会议,楼宇自动化等等共18类,相信你下载不会后悔
教你将几张图的图例合并为一个,共享一个图例在图形中
本文将详细介绍几种不同的键盘显示电路图例,它们都是基于单片机控制,旨在提高系统的效率和用户友好性。 首先,带键盘、显示的单片机参考电路图(一)采用动态扫描键盘和动态扫描显示的设计。动态扫描是一种节省...
在GIS(地理信息系统)开发中,图例是地图不可或缺的一部分,它用来解释地图上各种符号、颜色和线条代表的意义。本范例“布局中图例的动态生成”着重讲解如何利用Java组件在SuperMap iServer端进行扩展开发,以便在...
在IT行业中,CAD(Computer-Aided Design)是一种广泛使用的计算机辅助设计软件,用于创建、编辑和查看各种工程和设计图纸。"cad弱电2015图例"是指使用CAD软件绘制的2015年版本的弱电系统图例集合。弱电系统通常指的...
在ArcGIS中制作色带图例是一项常见的任务,特别是在地理信息系统(GIS)中展示地图数据时。色带图例能够清晰地表示出不同颜色区间所代表的数值范围,帮助用户理解地图上的数据分布。以下是一个简明教程,分为三个步骤...
### 在AO开发中布局视图中生成图例功能的实现 #### 一、概述 本文旨在探讨如何在ArcGIS(AO)中通过VBA编程实现布局视图中的图例功能。这一功能对于地理信息系统(GIS)应用开发尤为重要,能够帮助用户更直观地...