所在位置:答疑 - 内容 |
如何评价类似ZenUML这样的工具 |
zhoujing 2019-8-29 13:20 潘老师,最近有人推荐zen UML,貌似很强大,能从代码生成UML,这是一种画UML的新趋势吗? UMLChina潘加宇: 先说结论: 新趋势谈不上,而且用处不大。不过如果这样的工具能够流行起来,让程序员拥有一些建模的意识,然后在此基础上再去了解更有用的建模技能,那是很好的。不过,也要警惕变成"偷懒庇护所"。 从字符生成UML图形,这个能力很多UML工具都有——把已有代码逆向工程为类图、序列图。 下面两个图就是用EA和UModel逆向工程某个项目的代码得到的序列图
类似ZenUML这样的工具的新意是,在一侧输入字符的同时,另一侧立刻就出现UML图形,毕竟图形比文本要漂亮,给人一种"我在建模耶"的高大上感觉。 类似的工具有不少,参见UMLChina整理的UML工具大全>>。 ZenUML只支持序列图,最流行的PlantUML支持很多图,不过ZenUML采用的语法更像主流编程语言的语法。 以下内容和ZenUML无直接关系,属于本问题回答的扩展。 但是! 就像上面说的,这样的工具给人一种"我在建模耶"的高大上感觉,很容易成为偷懒的庇护所,用来掩盖开发人员的懒惰和无能。 (1)没有增加(或减少)任何信息 可以比较一下问题所给的图的左右两侧,右侧比起左侧只是形式上的变化,并没有增加(或减少)什么信息,而且更占用空间。 软件开发中,增加的每一个字符,每一张图都应该凝结了新的思考结晶,否则就是废的,所以《软件方法》第1章推荐的工作流步骤中,不推荐画设计工作流的UML图形,UML图形用到分析模型为止,设计模型直接用源代码来表达,即"设计就是代码"。 关于增加(或减少)信息 增加信息举例:例如根据分析模型(只包含核心域知识),再选择好非核心域(即所谓"技术栈",例如HTML+.....+ Spring MVC+.....+MySQL)以及相关配置,就能得到各个非核心域的"源代码"。当然,目前各种选择和搭配花样繁多,工具直接完全生成还不现实,现实的是分析模型+典型用例实现样例+人肉训练。 减少信息举例:从各种混合了核心域和非核心域知识的"源代码"中,提炼出仅包含核心域知识的分析模型。 (2)有可能掩盖了思维颠倒的脓包。 关于思维颠倒,《软件方法》第1章有讲: 图3 《软件方法》第1章截屏 就怕有的开发人员根本没有能力做业务建模、需求、分析工作流的思考,干脆拍脑袋写了代码,代码当场转UML模型,然后就说我有图了,建模了,万事大吉了。 问题在于,你怎么知道这样的类、这样的责任分配就是合理的呢?有的人说不出理由的,经常用"我觉得"、"我打算"这样的词语来遮掩。 不只有新人是这样,有的挂着"资深架构师"头衔的开发人员也是如此。最近两年"领域驱动设计"重新成为时髦词语,我也沾光接了一些任务,听到“架构师”张嘴就是"我打算把**作为聚合根"……只能一声叹息。
什么时候能把"我打算"改成"我应该"就进步了。 20190901补: 有同学问怎样用比较好的问题——重点用在业务建模、需求和分析工作流就好。群里前两天有同学发消息并贴了图,像这样用就挺好(虽然图不太对,应该没有那么多Business Actor,消息不应该是虚线……)
|