Robert C. Martin关于UML、CASE的观点

最近在看《Agile Principles,Patterns,and Practices in C#》, written by Robert C. Martin and his son Micah Martin. 其中写到他们关于UML、CASE使用的观点,有点颠覆传统的意味,觉得很好玩儿,贴出来和大家共享。我的理解也许还有偏差,不能完全代表Robert的观点,纯属标题党吸引眼球,呵呵。

1、要对完全掌握UML的n多种图形么?

UML有类图啊、状态图啊什么的好多种,但对程序员来讲,一般用到的也无非就那么几种:类图(Class Diagrams)、对象图(Objects Diagrams)、顺序图(Sequence Diagrams)、协作图(Collaboration Diagrams)和状态图(State Diagrams);

2、为什么要建模?

有人可能说:架构设计师不用UML画上一大堆的图形那还叫架构师么?可Robert说,非也,架构师是用代码而不是一大堆乱七八糟的UML图形,UML图形只是用来交流的工具,是用来画在白板或者白纸上,用完就扔的,而不是把它弄成一段貌似正式的文档装订成册装点门面。

3、开发过程一定要建模吗?

非也,建模的目的是为了测试某个方案是否可行,既然是测试,当然那个成本低就用哪个,如果直接用代码和画复杂的UML图代价差不多的话,还不如直接用代码。

4、什么时候要画UML图,什么时候不用画?

需要画的情形:

  • 几个人需要同事做某件事,从而他们都要了解整个结构,需要画UML图统一思想。大家达成共识了,这些图形也就功德圆满,可以擦掉扔掉了。
  • 你想让团队达成共识,但有那么一两个不同意你的方案。你需要在固定的时间段内来讨论一下,讨论时间用完了就应该把结果定下来,不要总没完没了的讨论、扯来扯去的。可以通过投票或者权威人士判定。
  • 当你在思考一个设计时,可以用UML来辅助思考,想清楚了就可以把这些图形扔掉了。
  • 你要把你的代码解释给别人听时,需要画一些。
  • 项目要结束了,客户非要你提交UML图当做文档时,得画吧。

下面的情形就不用画了:

  • 貌似软件开发过程要求了要画UML然后在coding?
  • 你觉得要不画点UML图什么就会觉得内疚,其实大可不必。
  • 创建复杂的UML比写代码还麻烦呢,这种情况还不如不画

5、关于CASE工具

在你打算投资购买一套CASE工具之前,要仔细想想清楚哦~

  • CASE工具不是能让我们在画UML图时更容易么?不,他只能是增加复杂度。因为你学习这个软件也得费半天劲。
  • CASE工具不是能让一个大的团结在画UML图时能更方便的合作么?只是有时候是,但是一般一个很大的团队根本用不着画那么多那么复杂的UML图形。
  • CASE工具不是能自动生产代码么?的确是,但是维护修改这些生产的代码估计和你自己写也省不了多少事,所以建议在花钱买CASE工具之前好好衡量一下到底能给你提高多少的生产力。
  • 那把CASE工具和IDE集成在一起的怎么样?嗯,这个想法不错。但是坦率的说,我宁愿把投入到CASE的这部分钱花在IDE在编程方面的改进上。

6、有的时候使用文本格式的比图形更简单。还有机会使用自动化工具做进一步处理。比如针对State Transitions Tables的SMC(Statce Machine Compiler) 可以参考 http://www.objectmentor.com

 

嗯,结论:

不要为了UML而去UML;UML只是交流工具,交流清楚了就可以扔掉了;在画UML图形时应该能够想像到对应的代码实现,否则就别画了。

转载于:https://www.cnblogs.com/junqilian/archive/2008/03/14/1105328.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux配置 DNS and BIND服务配置详解--缓存服务器配置 正反向解析配置

一、DNS简介一、DNS简介 DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必…

位运算应用口诀和实例(转自大笨狼)

位运算应用口诀和实例 位运算应用口诀 清零取反要用与&#xff0c;某位置一可用或若要取反和交换&#xff0c;轻轻松松用异或移位运算要点 1 它们都是双目运算符&#xff0c;两个运算分量都是整形&#xff0c;结果也是整形。 2 "<<" 左移&#xff1a;右边空出…

我的博客网站开发6——博文关键字搜索

在页面中&#xff0c;用户可以通过关键字的搜索功能搜索博文。可以实现类似百度和Google的页面搜索功能&#xff0c;可实现多个关键字的搜索。搜索后&#xff0c;在搜索的结果中有关键字的高亮度的提示如&#xff1a; 在搜索的结果页面&#xff0c;模仿Google的搜索页面的快照功…

ogre plugin for 3dmax 最新进度和功能说明

1. position, diffuse, normal, texcoordx的导出2. multi material的处理3. 最小化vertex复制/拆分4. material及sub-material数据导出5. two-sided material的支持&#xff08;自动复制出背面顶点信息&#xff09;6. 智能texture自动复制7. bone animation的完全支持8. helper…

shell 函数定义和调用

为什么80%的码农都做不了架构师&#xff1f;>>> 一. 函数定义 语法&#xff1a; [function] functionname[()]{action;[return int;] } 说明&#xff1a; 1、可以带function fun() 定义&#xff0c;也可以直接fun() 定义,不带任何参数。 2、参数返回&#xff0c;可…

Nhibernate代码生成器v2.1中文版

Nhibernate代码生成器v2.1中文版(转发)下载转载于:https://www.cnblogs.com/hakuci/archive/2008/03/15/1106802.html

Head First设计模式读书笔记——策略模式

问题描述&#xff1a; 目前的任务是实现一个FPS类游戏的各种角色&#xff08;友军、敌军、平民和狗、猫、鸭子等动物&#xff09;以及他们的各种行为&#xff08;攻击、游泳等&#xff09;。 设计方案一 很简单&#xff0c;只要实现一个角色超类&#xff0c;将角色的各种行为放…

centos+bond+bridge+docker(ssh容器)固定ip实现测试环境(一)

硬件&#xff1a;R730交换机&#xff1a;H3C Switch S5120-28P-SI系统&#xff1a;centos7#nmtuihttp://568273240.blog.51cto.com/802.3ad为LACP模式交换机部分&#xff1a;# systemctl restart network可以多重启几遍试下。http://568273240.blog.51cto.com/注意&#xff1a;…

jQuery 获取屏幕高度、宽度

做手机Web开发做浏览器兼容用到了&#xff0c;所以在网上找了些汇总下。alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档的高度 alert($(document.body).height());//浏览器当前窗口文档body的高度 alert($(do…

python 发起HTTP请求

因为微信公众号群发需要调用高级群发接口&#xff0c;其中涉及到python发起HTTP请求&#xff0c;现在将相关实现操作记录如下&#xff1a; 首先&#xff0c;HTTP请求分为GET和POST&#xff0c;如下所示&#xff1a; 首先是发起get 请求&#xff1a; # -*- coding: utf-8 -*- im…

如何在webservice中取得sesssionid

[WebMethod(EnableSessiontrue)] 一定要标注EnableSessiontrue public string GetID() { return Session.SessionID; } 转载于:https://www.cnblogs.com/suneryong/archive/2008/03/26/1122578.html

pthread_join

函数简介 函数pthread_join用来等待一个线程的结束。函数原型为&#xff1a; extern int pthread_join (pthread_t__th, void **__thread_return); 第一个参数为被等待的线程标识符&#xff0c;第二个参数为一个用户定义的指针&#xff0c;它可以用来存储被等待线程的返回值。…

简单线性回归算法

为什么80%的码农都做不了架构师&#xff1f;>>> /*** 简单线性回归算法* param array y轴数据* param array x轴数据* returns array(slope,intercept,r2)*/ function linearRegression(y, x) {var lr {};var n y.length;var sum_x 0;var sum_y 0;var sum_xy …

模拟BS服务器

一、模拟BS服务器分析 二、BS模拟服务器代码实现 图片都是单独请求&#xff0c;后台单独线程&#xff0c;这边是通过构造方法传入的Runable接口的实现类匿名对象创建线程&#xff1b; 创建本地输入流读取到网络输出流传过来的信息再放到网络输出流中返回&#xff1b; 转载于:ht…

c#修饰符!

在C#中&#xff0c;有如下几种修饰符&#xff0c;分别是public,protected,internal,private。先来看一下C# 4th Edition中的说明&#xff1a; public No restrictions. Members marked public are visible to any method of any class. private The members in class A that ar…

wifi定位技术

wifi定位是iphone升级到1.1.3之后新加的应用服务&#xff0c;拿到机器后开始试用一下wifi定位。在美国达拉斯&#xff0c;定位按钮被按下后&#xff0c;旋转了大约2秒钟&#xff0c;所在的街道就立刻闪现在屏幕中央了。难怪乔布斯也说&#xff1a;“Its really cool”&#xff…

linux定时任务启动

/sbin/service crond stop /sbin/service crond start /sbin/service crond restart

不要62

题目 试题描述杭州人称那些傻乎乎粘嗒嗒的人为 62&#xff08;音&#xff1a;laoer&#xff09;。杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可以消除…

myssh

http://blog.csdn.net/infon/archive/2007/04/17/1568309.aspx http://blog.csdn.net/infon 转载于:https://www.cnblogs.com/tries/archive/2008/04/11/1148121.html

队列,排队买饭

1 /*这题的错误是和同学熬夜找出来的呃 。。。*/ 2 3 #include<stdio.h> 4 #include<string.h> 5 int main() 6 { 7 int front,rear,i,f,j,n,t,q[10000]; 8 char s[20]; 9 scanf("%d",&n); 10 rear 0,front0; 1…