《架构师》反思:软件架构设计

最近在看《软件架构师教程》,今天就第五章《软件架构设计》总结一下,其中还有自己所联想到的。主要从以下几个方面来描述:

  • 软件架构
  • ABSD
  • 架构模式
  • DSSA
  • 架构评估

 

软件架构

架构的定义,在业界,目前主要分为两类:结构派 和 策略派。结构派认为架构是指软件中各构件的组织结构以及各构件之前的相互关系。策略派认为软件的架构设计是要为软件的每个重要的决择进行权衡,并作出最终决定。

架构,作为系统中最重要的组成部分,对整个系统有着重要的作用:

对于软件开发而言,首先,架构设计能使系统各方面质量达到预期的目标;其次,它能全过程指导开发、测试,并有效地管理软件的复杂性,降低维护成本。

在软件工程方面,架构设计能有效地支持计划的编制,支持冲突分析,使受益人目标一致。

目前对于软件架构的研究,还处于不成熟的阶段。在软件生命周期的各个阶段中,架构设计以及与软件工程的结合,也正处于摸索阶段,正在尝试如何让架构设计更好的指导工程的生命周期各阶段的活动。

 

ABSD

全称:Architecutre Based Software Development,即基于架构的开发方法。就是在架构设计后,以文档化的架构为系统的主线,指导并保证其它活动的顺利开展。

主要经历以下阶段:

从图中可以看出,ABSD是一个迭代的开发模型:在需求获取完成之后,需要提取出体系结构的需求,包括功能需求、质量属性及系统的约束,后再者将会成为影响架构设计的重点。架构设计到架构的复审,是一个较小的重复周期,目的是为了架构设计能通过审核达到预期的质量目标。当审核通过后,架构指导开发过程完成系统实现。过程中,可能会对架构进行演化,在一定程度上,也可以说是在做架构的重构,这时,需要再次重复整个过程,这是一个大的迭代。

具体的过程,请看以下几个图:

 

设计过程完成后,需要对架构进行文档化,主要输入两个文档:《架构规格说明书》、用于测试体系结构需求的《质量设计说明书》

《质量设计说明书》中应该对质量目标进行定义,它也是后面进行架构评估的依据。定义时,可以依据ATAM中的5,具体内容参见本章的“架构评估”小节。

《架构规格说明书》中,应使用较成熟的架构描述方法对架构进行描述。如可采用业界目前比较认可的4+1视图。

文档的完整性是软件架构成功的关键。文档应该从使用者的角度进行编写,必须分发给所有与系统有关的开发人员、且必须保证开发者手上的文档是最新的。同时,这些输出的文档也应该面向架构评估。

复审之前,最好做一个较小的系统原型,以方便评估。

复审的目前是为了保证架构能满足软件的质量要求,架构设计的构件和层次要比较合理,架构的描述要清晰。

 

 

架构风络

其实,架构风格就是架构模式。

模式,是在一定的环境下,不断地重复出现的一种形式。也就是说,一个特定的架构模式,有其适用的使用场景。例如,最受欢迎的三层架构,在系统较小时就不太适用。又如,面向对象的架构,在对于以数据处理为核心的应用场景也可能不太适用,同时,对于查询密集的系统使用面向对象,极大影响系统性能,反倒成为一种反模式。

架构重用,是软件架构研究的核心目标之一。对架构模式的研究,可以极大的促进业界对软件架构的重用。

 

DSSA

由于一个领域中的核心领域对象往往不会发生改变,所以对它们进行研究,可以实现核心业务的积累和重用。由于整个领域中核心对象往往不会发生改变,而围绕它们的应用,按照应用程序的类别划分后,同一类别下的应用程序往往架构也是类似的。所以对一类系统进行架构分析,就是为了找出在此类系统中通用的架构模式。

GIX4项目也是使用了基于领域的架构。准确地说,GIX4的架构是使用了领域驱动、模型驱动的产品线架构。具体架构内容,会在后面的文章《架构设计师-GIX4-架构介绍》中介绍,其中会对DSSA如何在GIX4上应用做一个较全面的讲述。

 

架构评估

在架构设计的目的中,我已经说过,架构设计最重要的目的是为了让系统能满足预期的质量需求。所以,在架构评估阶段,最重要的也就是评估这个架构是否能满足质量需求。也就是说,架构评估,重点关注的是质量属性。

在《教程》中提到,本阶段需要使用场景的方式来定义产品的质量目标。其实不然,质量目标是架构设计的重要依据,往往是在架构设计的初始阶段就已经被定义好了,也就是前面提到的架构设计阶段的输出《质量设计说明书》。虽然那时的定义不一定完整,但是一样可以在架构评估过程中,先对它进行评估,然后就可以作为架构评估过程中质量评估的基准了。

其实,就大方向上看,架构评估也是架构设计的一个部分。评估的过程,就是各专家在一起对架构初稿进行审核、提问、反思、建议。架构师以一人之力,很难把一个大型系统的架构设计得天衣无缝;这时集多人的力量在一起对初稿进行评估,可以起到查漏补缺的作用。

 

小结

架构设计是软件设计过程中最重要的活动之一,架构设计的优劣直接影响到目标系统的各个质量属性。

我认为,基于架构的开发方法,是一个很重要的方法论,我们可以用它来保证软件达到质量标准,并指导整个开发过程。同时,可以结合目前业界流行的敏捷方法来实施,这样可以在不同高度对软件开发进行控制。

时间: 2025-01-20 21:19:28

《架构师》反思:软件架构设计的相关文章

架构师-我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗?

问题描述 我在设计一个表结构.主键生成策略选择哪种好,有什么讲究吗? 选uuid? 还是选数字自增? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 一般情况下都用哪个啊? 解决方案 主键一般都是非业务主键,仅作编号没有实际意义,自增或者UUID都可以的.比较如下: 解决方案二: 数字自增长 一直用的这种,还不错.

【转载】架构师的行为准则(三)

让开发人员自己做主       架构师虽然需要为系统的设计负责,但无须包揽所有的设计工作,应该给予团队成员足够的自主权,让他们发挥自己的创意和能力,你的工作是确保大家的工作能很好的组合在一起,帮助他人解决棘手困难.当你发现同事遇到麻烦时,可以主动给出建议,但更可取的做法是创造良好的氛围,让大家主动向你征求意见.  控制项目规模       架构师要试图避免做那种"超大型"系统,因为这种系统往往难以控制,控制项目规模的办法通常有:  抓住真正需求 分而治之 设置优先级 尽快交付原则 架构

云时代:云架构师最抢手

在与云计算相关职业的调查中发现,云架构师最抢手. 在专注技术型工作招聘网站Dice.com上,如果你搜索"云计算"你将看到超过3800多个结构,据此网站总经理Alice Hill称,这一数据在过去的一年里上升了72%.云计算相关的工作市场发展速度势如破竹. 在筛选后的列表里,最抢手的职位是云架构师.其余的TOP10是: 云计算软件工程师 云计算销售主管 云计算工程师 云计算开发者 云系统管理员 云顾问 云系统工程师 云网络工程师 云计算产品经理 虽然这些"云"职位名

《Microsoft.NET企业级应用架构设计(第2版)》——第1章 今天的架构师和架构 1.1软件架构到底是什么

第1章 今天的架构师和架构 在计算机的最初年代,硬件成本远远大于软件成本.数十年之后,我们发现情况有了根本的变化.整个工业有了显著的进步,而硬件成本也急剧下降.另一方面,软件成本却大幅上升,这主要是因为开发自定义企业软件的复杂性提升了. 这种情况催生了一系列的准则,并以此指导工程师设计这类系统.架构这个术语源自建筑行业,现已普遍用于描述规划.设计和实现软件密集型系统的艺术.当我们两个还是青少年时,<爱是-->这部漫画(http://www.loveiscartoon.com)正值流行.每期漫画

《Microsoft.NET企业级应用架构设计(第2版)》——1.2 谁是架构师

1.2 谁是架构师 如你所见,架构通常是关于难以更改的决定.需要有人做出这些决定. 架构设计基于需求分析.分析确定系统要做什么:架构决定如何去做.需要有人了解这个"什么"来确定这个"如何". 架构师正是把需求和规范关联起来的专家.但架构师的职责是什么?需要哪些技能? 1.2.1 架构师的职责 根据ISO/IEC 42010标准,架构师是负责系统架构的个人.团队或组织.架构师与分析师和项目经理互动,评估和提议系统方案,以及协调开发团队. 架构师参与开发流程的所有阶段,

Web基础架构设计原则经典论文《架构风格与基于网络的软件架构设计》导读

1. 概述 Roy Fielding博士(见个人主页)是IETF发布的HTTP和URI协议的主要设计者.HTTP和URI是两个最为重要的Web基础技术架构协议,因此Fielding博士可谓是Web架构的奠基者之一. 除了学术上的卓越成就之外,Fielding博士还参与过很多开源软件的设计和开发工作.他是libwww-perl(世界上最早的HTTP开发库之一)的开发者,曾经负责Apache HTTP服务器中与HTTP.URI协议相关部分代码的开发.Fielding博士还指导过很多其他团队在HTTP

通向架构师的道路 第二十六天 漫谈架构与设计文档的写作技巧

前言: 这篇是一篇番外篇,没有太多代码与逻辑,完全是一种"软"技巧,但是它对于你如何成为一名合构的架构设 计人员很重要. 在此要澄清一点,架构师本身也是"程序员",不是光动嘴皮子的家伙们,如果你不是一名程序虽出身 那你根本谈不上也不可能成为一名架构师. 那么架构师还有哪些是作为一名程序员来说不具备的呢? 其中有一项 能力就叫做"文档写作能力". 一.Soft Skill与Hard Skill 作为一名架构师除了是一名资深的程序员外,它还 必须具有

设计-架构师应该具备哪些主要技术

问题描述 架构师应该具备哪些主要技术 5C 现在企业开发流程是怎样的?设计蓝图用什么技术?UML.RUP.XP?我现在是公司里唯一的程序员.我想自己能够按照正规的流程开发网站!让网站能够在自己的掌控之中!我现在开发的网站都没有设计就直接开发了,导致现在快开发不下去了,太乱了.有没有相关的书籍或文章等? 解决方案 我觉的说到底应是经验,有的东西没搞过你怎么知道怎么搞?书到是看了一大堆,现实的问题不一定匹配啊. 当然基础扎实是必须的 解决方案二: 先考虑怎么把程序搞好再谈架构吧.就像练武功,你功力不

通向架构师的道路(第二十六天)漫谈架构与设计文档的写作技巧

前言: 这篇是一篇番外篇,没有太多代码与逻辑,完全是一种"软"技巧,但是它对于你如何成为一名合构的架构设计人员很重要. 在此要澄清一点,架构师本身也是"程序员",不是光动嘴皮子的家伙们,如果你不是一名程序虽出身那你根本谈不上也不可能成为一名架构师. 那么架构师还有哪些是作为一名程序员来说不具备的呢? 其中有一项能力就叫做"文档写作能力". 一.Soft Skill与Hard Skill 作为一名架构师除了是一名资深的程序员外,它还必须具有相应的S