工厂运营部门职责:4+1视图、UML与通用语言--专业、求是、解惑

来源:百度文库 编辑:中财网 时间:2024/04/29 20:17:06
4+1视图、UML与通用语言  [ 2009-11-26 7:42:00 | By: 陈晴阳 ]   0 推荐

视图,简单的说就是从某个角度来看事物而获得的景象。温昱顾问在他的博客中有篇文章例子举得很好,他用“世界人口分布图”和“世界年降水量分布图”两种不同的视图来刻画世界的不同方面。4+1视图实际上也可以理解为,从用例、开发、部署等不同的角度去看软件系统本身。

现在有个问题:视图跟UML有什么关系?架构师需要掌握UML吗?

【案例:电视天气预报】

新闻联播后,中央电视台发布电视天气预报,播报员一边指着屏幕上的卫星云图一边说:“受冷空气影响,新疆西部沿天山地区西北地区中东部的部分地区、东北等地仍将有小到中雪或雨夹雪。而西北地区东南部四川盆地贵州黄淮西部和南部、江淮江南自西向东有一次降水过程,其中淮河上游降水明显,可达中雨或以上量级。除了雨雪,冷空气还将给北方部分地区带来大风降温。预计未来两天,新疆西部、内蒙古大部、东北大部等地有6~8℃降温,其中,内蒙古中东部、东北等地的局部地区降温可达10℃。内蒙古大部、东北地区、华北北部等地有4~6级风新疆山口地区风力可达7~8级。”

电视中的卫星云图为我们展示了中国地区的“卫星云视图”,它从气象的角度对中国地区的情形进行描述,就好比我们从部署的角度去描述应用系统一样。天气预报不仅要向大众展示这样的视图,而且需要播报员对其进行解释,于是,播报员就充当了UML的角色,他使用一套专业术语(UML)对整个卫星云视图(应用系统的部署视图)进行解释。

大家都知道,UML是种语言,语言就是为了达到交流的目的。架构师不仅要能够从各个不同的角度去把握整个应用系统的架构,而且需要能够与领域专家、最终用户、软件人员进行交流。现在又来一个问题,UML能把问题解释清楚吗?

再看上面的案例,请注意粗体字的部分,我敢肯定,对于普通的老百姓而言,要完全理解上面这段话的含义并非易事。当然,像“新疆”、“内蒙古”、“贵州”等词语,理解起来一般是没有问题的,但是,“江淮”、“黄淮”、“7-8级风力”呢?有的人不知道是什么概念,也有对这些概念产生分歧的。比如,什么叫“1级风力”,1级风力有多大?7-8级风吹到身上是什么感觉?很明显,播报员说的话并非所有人都能理解。当然这里只是一个例子,要让全中国13亿人口在这些概念上达成共识恐怕是不可能的。

因此,我们需要一种更为“专注”的语言,它专注于应用系统所涵盖的领域,使得参与该应用系统的所有角色都能够理解领域模型,并能用它毫无障碍地交流。UML并不是专注于特定领域的语言,因此,UML不一定能把事情说清楚。《Domain-Driven Design Quickly》中有这样一段话:

So UML cannot convey two important aspects of a model: the meaning of the concepts it represents and what the objects are supposed to do. But that is OK, since we can add other communication tools to do it.

在领域驱动设计(DDD)实践中,需要创建一种领域特定语言(Domain Specific Language),DDD称之为“通用语言”。通用语言必须拥有如下几个特点:

  1. 专注于领域(Domain Specific)
  2. 对领域概念的定义不会产生歧义,它用于描述整个领域中的问题,而不仅仅局限于界定上下文
  3. 所有参与应用系统的角色能够用它进行毫无障碍的交流,交流过程中不需要第三方进行翻译

【例子:产生歧义的概念】

如果我们仅仅是开发一套邮件系统,那么“账号”这个概念就非常清楚:就是用户的邮件账号,它的功能就是对用户进行区分,并确定用户的权限和服务。如果我们是开发一套带有网店功能的零售系统,那么“账号”这个概念就会出现歧义了:到底是用户在网站上注册的那个账号,还是他的银行付款账号?通用语言需要对其进行区分。

【实践:Microsoft Domain Specific Language Tools (MS DSLTools)】

从.NET框架的发展我们可以了解到,微软正朝着领域驱动设计的方向前进。从DataSet到TypedDataSet,从Linq to SQL到Entity Framework,微软使得系统的开发模式逐步地从“数据库驱动”转变到“领域驱动”。MS DSLTools正是微软在DDD上的又一贡献:它允许软件人员与领域专家、最终用户一起,创建面向特定领域的描述语言,从而减小系统各角色之间的交流成本。