作者:张明星 出处: dev2dev.bea.com.cn
对于软件架构这一概念,有太多的版本,目前在业界由大师级人物或组织提出的对这一概念的阐述就超过十种以上,我个人比较赞同RUP(Rational Unified Process)中对软件架构的定义,即软件架构包含了关于以下问题的重要决策:
- 软件系统的组织;
- 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为;
- 如何组合这些元素,使它们逐渐合成为更大的子系统;
- 用于指导这个系统组织的架构风格:这些元素以及它们的接口,协作和组合。
本文我们并不是要探讨软件架构的定义,只是想基于上面这种定义来谈谈在软件系统架构设计的过程中,我们会常常用到的一些“武器”。
长生剑:UML(UML2)
UML(Unified Modeling Language)这一建模语言已经成了软件设计人员的必备工具,几年前就曾有过“苦干年之后,不通UML者无法染指软件开发”的言论,虽然从目前来看,UML的应用还并未达到如此程度,但使用UML最大的好处在我看来就是减少了沟通的成本,让我们把一些想法能够很清晰直观的表达出来,在设计的过程中,使用得较多的是用例图,类图,组件图,部署图和时序图。当下,各种设计和建模工具对UML都有良好的支持,UML本身也是一门不断发展的语言,现在UML2已经成为主流。UML本身也极为简单,对于初学者来说可能有些概念比较难懂,可以结合实际的程序来理解,这样会事半功倍,但我认为也不会太高深,熟练使用就达到了应有的境界。
剑谱:
UML官方网站 http://www.uml.org/
《UML基础、案例与应用(第3版)》,此书作为UML入门较为适合,书中也以详实案例来教会我们怎么使用UML。
孔雀翎:Office
架构设计的成果就是两项重要的产出物,一是框架代码,二是架构设计文档。在架构设计文档中,除了包括一些UML图之外,还有一些UML无法表示的图表,采用Office来制作和撰写这份文档再合适不过,最常用的就是Word,Excel和Visio。
掌握这门“武器”不难,可利用这门武器把各类文档写好就难了,除了专业能力,良好的文字表达能力也是十分重要的,一个成熟的架构设计师在我看来应该也能写得一手好文章,最基本的要求就是能够准确的表达你想要表达的意思。
秘籍:
《Word排版艺术》,在大陆十分有名的*IT作家候捷的作品(之所以这样说是我曾经跟我们公司在台北的同事聊起过此人,几乎没人知道此人),此书一度借着他的名气卖得很火,因为他出书很多,在这方面也有很多优秀的经验,值得借鉴。
碧玉刀:IDE(IBM RSA或Borland Together)
通常我们所说的IDE(Integration Development Environment)是指集成开发环境,在这里我借用这个词,指的是集成设计环境。随着软件业的发展和进步,支持一整套开发流程的全系列软件越来越多,越来越好,这其中以IBM Rational Software Delivery Platform最为突出,RSA(Rational Software Architect)就是其中一项,作为建模工具,对领域模型的设计,UML及SOA(Service-Oriented Architecture)等都有较好的支持,同时可以与RMC(Rational Method Composer)结合,充分发挥MDA(Model Driven Architecture)的思想,把RUP流程发挥到极至。
不过发现RSA也有不好用和不听话的时候,最新的RSA V7.0里面的反向工程就不是很好用,反向过来后很多关系消失了。
Together作为老牌儿的建模工具,也有着先进的思想和设计,其核心包括四个方面:只维护单一模型库(Live Source技术);符合最小的元模型;扰乱改变模型;支持持续的质量测量。同时,对正反向工程也有良好的支援。也正是因为其有自己的思想和独特的一套,Borland公司也才会将其并入旗下。
刀谱:
IBM RSA之《教学指导》,Eclipse平台都有这东东,大家自己去发掘吧,通俗易懂。
IBM RSA相关的Redbook(http://www.redbooks.ibm.com/),大名鼎鼎的红宝书,相信入行不久就一定会知道的(其实在大学的时候就人有看什么GRE的红宝书,TOEFL的红宝书,估计红宝书一词来源于此)
《Getting Started Guide for Borland Together 2006 for Eclipse》官方教你怎么玩转Together,权威信不用质疑,英文版,但看起来并不难懂。
多情环:架构设计类经典书籍
架构设计类好书不多,但也不是没有,我也没有认真读过几本,但觉得有那么两本还值得推荐:《Pattern Of Enterprise Application Architecture》,Martin Flower的经典之作,几乎是架构设计人员的必读之书,详细论述了企业应用各layers上的模式和设计思想;《Large-Scale Software Architecture》,告诉你什么样的人才是架构师,然后以构件为粒度深入探讨架构的方方面面,同时用UML呈现,也是一份UML在架构设计中应用的最佳实践;《J2EE Core Pattern》,设计Java平台应用系统的经典参考书,对GOF(Gong Of Four)的设计模式在Java中的应用和扩展进行了深入的讨论,看看你的设计中可以运用其中的哪些核心模式。
秘籍:
有一套适合自己的学习知识的方法,对于IT行业的人来说,要看的书籍和资料远远超过其他行业,面对如此繁杂的知识,要有自己的方法学会去整理,要做到看必有收获,否则不如去温习古龙或是金老爷子的小说。我常常喜欢用Mind Manager等软件把读书笔记和心得记录下来,也常常回过头来看看这些笔记,以前喜欢手抄,信奉什么好记心不如乱笔头,但后来发现有些落后,不能与时俱进,方式肯定会被淘汰,人自然也会被踢出局。
霸王枪:Internet/Intranet
当今时代,离开网络这条枪对于IT从业人员来说寸步难行,大多公司目前都还没有自己完善的Intranet,公司知识库的资料与Internet的资源相比可谓是小巫见大巫,但千万不要忽视了公司通过SEPG(Software Engineering Process Group)或相似职能部门积累起来的知识,这些东西往往关注于行业,领域或适合于你所在公司的实际状况,从这个方面考虑的话,其力量超越Internet,是很好的模板。常常我们会遇到自己不能解决的问题,这个时候就需要去网上百度一下;在架构设计文档中,我总喜欢弄个术语表,而对于有些术语的解释,你会发现百度原来也是一本好辞典。
枪谱:
百度,谷歌
利用搜索引擎,可以快速的获得自己需要的资料,大幅提高效率,也不至于让你淹死在浩如烟海的信息海洋中。
之所以将百度写在前面,是因为我的个人习惯,常常在搜索的时候会优先考虑用百度,在百度搜不到的情况下才去谷歌,百度出来的大都是中文资料,对于母语是中文的人来说,会提高我们的阅读速度和理解效率,命中率较高,较好的分词技术,值得推荐。谷歌当然不错,相信不用多说。
离别钩:评审
邀请你公司的架构设计同行,资深技术专家,公司领导,或行业中的其他专家,还有你的PM(Project Manager),充分利用团队的力量,对于你所做的架构设计的初稿进行评审,在评审前先把重点部分,特别是你想跟大家一起讨论更好解决方式的部分整理成简单的演示文稿(PPT)发给大家,同时把详细资料也发给大家,请大家在有空的时候提前了解。在评审会议时,要先向与会人员介绍一下项目背景,需求,千万不要忘了非功能性需求(包括性能,安全,可扩展性等方面),然后再从重点的议题开始与大家一起讨论,这样可提高效率。
秘籍:
虚心听取各方面意见。评审时大家会提出各种各样的问题,有时候可能会提出各种让你很生气的问题,这个时候一定要克制住自己的情绪,虚心的听取他们提出的建议,对各种问题进行解释,让他们真正明白你的意思,同时也从他们那里获取有用的建议。
拳头:激情
这也是与人最密切相关的一样武器,拳头是你身体密不可分的一部分,激情也是你思想密不可分的一部分,要想把架构设计做好,有做好一件事的激情是必不可少的,你要对新知识,新技术充满好奇心,要有创新精神,在前人的基础上,结合自己的所学去进行一些小的创新,其实人类的进步也就是靠这样的一次次的小创新,以最大程度的确保架构的稳定性和可扩展性,同时也尽可能的提高程序开发的效率。
秘籍:
确定自己的发展方向就是做一个技术专家。如果你对自己的职业规划有一些想法,不妨可以考虑一下这个方向,国外的很多大师级的人物因技术牛而成就了卓越的事业,国内目前也有向这个方向发展的趋势。
我认为做一个技术专家与向管理方向发展并不冲突,技术专家也可以是管理行家,软件行业的很多人都是“技术优则管理”,否则你在管理者的位置上却不懂得基本的技术,在各方面都会遇到绊脚石,也没有人真正的服你。
正如古龙所说,“武器是死的,人却是活的”。“武器”是否能令你觉得神奇刺激,主要还得看使用它的是什么人,虽然架构设计不是人人都可以做的,但我相信这几种武器通过大家自己的努力一定可以掌握。