`

应用软件系统架构设计的“七种武器”

阅读更多
应用软件系统架构设计的“七种武器”
2007-10-23 21:56:54 | 评论 (0) | 被访问(989)次

    软件架构师 




对于软件架构这一概念,有太多的版本,目前在业界由大师级人物或组织提出的对这一概念的阐述就超过十种以上,我个人比较赞同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)发给大家,同时把详细资料也发给大家,请大家在有空的时候提前了解。在评审会议时,要先向与会人员介绍一下项目背景,需求,千万不要忘了非功能性需求(包括性能,安全,可扩展性等方面),然后再从重点的议题开始与大家一起讨论,这样可提高效率。
秘籍:
虚心听取各方面意见。评审时大家会提出各种各样的问题,有时候可能会提出各种让你很生气的问题,这个时候一定要克制住自己的情绪,虚心的听取他们提出的建议,对各种问题进行解释,让他们真正明白你的意思,同时也从他们那里获取有用的建议。

●拳头:激情
这也是与人最密切相关的一样武器,拳头是你身体密不可分的一部分,激情也是你思想密不可分的一部分,要想把架构设计做好,有做好一件事的激情是必不可少的,你要对新知识,新技术充满好奇心,要有创新精神,在前人的基础上,结合自己的所学去进行一些小的创新,其实人类的进步也就是靠这样的一次次的小创新,以最大程度的确保架构的稳定性和可扩展性,同时也尽可能的提高程序开发的效率。
秘籍:
确定自己的发展方向就是做一个技术专家。如果你对自己的职业规划有一些想法,不妨可以考虑一下这个方向,国外的很多大师级的人物因技术牛而成就了卓越的事业,国内目前也有向这个方向发展的趋势。
我认为做一个技术专家与向管理方向发展并不冲突,技术专家也可以是管理行家,软件行业的很多人都是“技术优则管理”,否则你在管理者的位置上却不懂得基本的技术,在各方面都会遇到绊脚石,也没有人真正的服你。

正如古龙所说,“武器是死的,人却是活的”。“武器”是否能令你觉得神奇刺激,主要还得看使用它的是什么人,虽然架构设计不是人人都可以做的,但我相信这几种武器通过大家自己的努力一定可以掌握。



分享到:
评论

相关推荐

    系统架构设计师 设计模式

    《系统架构设计师 设计模式》是一本针对软考系统架构设计师考试的重要参考资料,它深入探讨了软件架构设计中的核心概念——设计模式。设计模式是软件工程中经过实践验证的、解决常见问题的有效方法,是软件开发人员...

    软件架构复习资料

    每种结构都有其特定的元素和关系,如模块结构中的分解、使用、分层、类或泛化,组件连接器结构中的进程、并发、共享数据或存储库、客户机/服务器,以及分配结构中的部署、实现、工作分配等,共同构成了软件系统的...

    机载制导武器导航系统嵌入式软件结构设计.pdf

    本文以实际的机载制导武器惯性/卫星组合导航系统为例,展示了如何运用上述设计原则构建一个高效、可靠的导航软件架构。该架构成功地在一个具体型号的机载制导武器上实施,验证了设计方案的有效性和可行性。 #### 五...

    大型互联网架构设计实例分析.docx

    #### 大型互联网站的七种武器 这部分内容详细介绍了支撑大型互联网站稳定运行的关键技术和方法,例如负载均衡、缓存机制、数据库优化等。 #### 如何成为一个优秀的网站架构师 Frank Lee结合自己近十年跨国企业的...

    基于制导武器分布式半实物仿真系统的应用研究.pdf

    总之,这篇文章详细介绍了如何构建和应用一个基于制导武器的分布式半实物仿真系统,涵盖了分布式系统设计、软件开发技术以及武器系统测试的关键环节,对于理解和改进军事领域的仿真技术具有重要参考价值。

    基于国产处理器的视频记录重演系统设计实现.pdf

    该系统旨在提高战场指挥控制的时效性和准确性,通过对车载武器系统的控制信号采集、编码压缩和记录存储的机理分析,提出了基于国产处理器的战场态势记录重演系统架构。 系统架构 该系统架构主要由三部分组成:视频...

    基于MCS-51单片机的洗衣机控制系统设计.doc

    系统设计是指根据实际需求设计洗衣机控制系统的过程,包括系统架构设计、电路设计、软件设计等。系统设计是整个项目的关键,直接影响着系统的性能和可靠性。 实时控制 实时控制是指系统能够实时地监控和控制洗衣机...

    微服务架构的优势与不足

    微服务架构是一种软件开发策略,它提倡将大型的单体应用程序拆分成一组小型、独立的服务,每个服务都专注于特定的业务功能,可以独立部署、扩展和维护。这种架构模式源于应对传统单体应用在面对复杂性和扩展性挑战时...

    FPGA技术在舰载武器电液伺服系统中的应用.pdf

    FPGA(现场可编程门阵列)技术是电子设计领域中的一项重要技术,尤其在对实时性要求极高的舰载武器电液伺服系统中有着广泛的应用。舰载武器电液伺服系统负责舰载武器的精准控制,对数据的处理速度和精度要求极高。...

    软件工程前言PPT学习教案.pptx

    第七种武器:软件工程实践 软件工程不仅仅涉及编程,还包括需求分析、系统设计、项目管理、质量保证等多个方面。了解敏捷开发、Scrum、Kanban等现代软件开发流程,以及版本控制(如Git)、自动化测试、持续集成/持续...

    系统可测性分析与辅助设计软件总体设计与关键模块实现.doc

    【系统可测性分析与辅助设计软件总体设计与关键模块实现】 系统可测性分析是衡量和提升设备或系统在出现问题时能够及时、准确识别和定位故障能力的关键设计要素。可测性设计对于提高武器装备的保障能力和降低测试...

    伟大架构师的秘密

    2. **设计阶段**:基于需求分析的结果,架构师开始构建系统的高级设计,这包括确定系统的整体结构、模块划分、数据流等。这一阶段通常会形成一系列的架构视图,如逻辑视图、物理视图和开发视图,各自关注系统的不同...

    《单片机原理及应用》课程设计单片机电子琴设计-毕业论文.doc

    6. 系统总体方案:系统总体方案是电子琴设计的总体架构。在本设计中,系统总体方案包括总体设计、硬件电路设计、软件设计等部分。 7. 定时器的应用:定时器是电子琴设计中的重要组成部分。在本设计中,定时器按设置...

    umlziliao.rar_UML 毕业设计_UML 设计_UML设计_uml _毕业设计

    这个案例可能涵盖了需求分析、系统架构设计、模块划分等多个阶段的UML应用,让学生能够直观地看到UML在实际项目中的运用流程。 再者,《12223937965.pdf》可能是关于UML设计方法论或教程的电子书,可能包含更深入的...

    FPGA在空空导弹武器系统测试中的应用.pdf

    综上所述,FPGA在空空导弹武器系统测试中的应用表明了其在实时信号处理、并行处理和系统自动化测试方面的显著优势。通过精确的时序控制和高效的测试流程,FPGA有助于显著提高测试的准确性和效率,对于提升空空导弹等...

    基于OSGI的软构件实时数据处理子系统设计与实现.pdf

    OSGI(Open Services Gateway Initiative)是一个用于创建和管理动态模块化Java应用程序的框架,它允许在运行时安装、卸载和更新模块,提供了一种灵活且可扩展的软件架构。 基于OSGI的软构件实时数据处理子系统设计...

Global site tag (gtag.js) - Google Analytics