架构的先决条件

软件架构(software archivtecture)是软件设计的高层部分,是用于支撑更细节的设计的框架。架构也称为“系统架构/system architecture”、“高层设计/high-level design”或“顶层设计/top-level design”。

为什么要把架构作为前期准备呢?

因为架构的质量决定了系统的“概念完整性”。后者继而决定了系统的最终质量。一个经过慎重考虑的架构为“从顶层到底层维护系统的概念完整性”提供了必备的结构和体系,它为程序员提供了指引——其细节程度与程序员的技能和手边的工作相配,它将工作分为几个部分,使得多个开发者或者多个开发团队可以独立工作。

架构的典型组成部分

很多组成部分是优秀的系统架构所共有的。

1.程序组织

系统架构首先要以概括的形式对有关系统做一个综述。

如果对某个类在系统中的角色没有一个清晰的构思,那么编写这个类就是一件令人灰心丧气的工作。描述其他组织结构,才能说明架构最后选定的这种关系组织结构的缘由并且表明各个类都是经过慎重考虑的。

架构应该定义程序的主要构造块(building blocks)。根据程序规模不同,各个构造块可能是单个类,也可能是由许多类组成的一个子系统。每个构造块无论是一个类还是一组协同工作的类和子程序,它们共同实现一种高层功能,诸如用户交互、显示web页面、解释命令、封装业务规则、访问数据等等。每条列在需求中的功能特性(feature)都至少应该有一个构造块覆盖它。如果两个或多个构造块声称实现同一项功能,那么它们就应该相互配合而不会冲突。

应该明确定义各个构造块的责任。每个构造块应该负责某一个区域的事情,并且对其他构造块负责的区域知道的越少越好。通过使各个构造块对其他构造块的了解达到最小,你能将设计的信息局限于各个构造块之内。

应该明确定义每个构造块的通信规则。对于每个构造块,架构应该描述他能直接使用哪些构造块,能间接使用哪些构造块,不能使用哪些构造块。

2.主要的类

架构应该详细定义所用的主要的类。

3.数据设计

架构应该描述所用到的主要文件和数据表的设计。

4.业务规则

如果架构依赖于特定的业务规则,那么它就应该详细描述这些规则,并描述这些规则对系统设计的影响。

5.用户界面设计

用户界面常常在需求阶段进行详细说明。如果没有,就应该在软件架构中进行详细说明。

架构应该模块化,以便在替换为新用户界面时不影响业务规则和程序的输出部分。

6.资源管理

架构应该描述一份管理稀缺资源的计划。稀缺资源包括数据库连接、线程、句柄(handle)等。

7.安全性

架构应该描述实现设计层面和代码层面的安全性的方法。如果先前尚未建立威胁模型(threat model),那么就应该在架构阶段建立威胁模型。

8.性能

如果需要关注性能,就应该在需求中详细定义性能目标。

9.可伸缩性

可伸缩性是指系统增长以满足未来需求的能力。架构应该描述系统如何应对用户数量、服务器数量、网络节点数量、数据库记录数、数据库记录长度、交易量等的增长。如果预计系统不会增长,而且可伸缩性不是问题,那么架构应该明确地列出这一假设。

10.互用性

如果预计这个系统会与其他软件或硬件共享数据或资源,架构应该描述如何完成这一任务。

11.国际化/本地化(Internationalization/Localization)

“国际化”是一项“准备让程序支持多个locales(地域/文化)”的技术活动。

12.输入输出(Input/Output)

输入输出(I/O)是架构中值得注意的另一个领域。

13.错误处理(Error Processing)

错误处理已被证实为现代计算机科学中最棘手的问题之一,你不能武断地处理它。

14.容错性(Fault Tolerance)

架构还应该详细定义所期望的容错种类。

15.架构的可行性(Architectural Feasibility)

设计师多半会关注系统的各种能力,例如是否达到性能目标,能够在有限的资源下运转,实现环境(运行环境)是否有足够的支持。架构应该论证系统技术的可行性。

16.过度工程(Overengineering)

详细定义一种过度工程(裕度工程)的方法尤其重要,因为许多程序员会出于专业自豪感,对自己编写的类做过度工程。通常在架构中明确的设立期望目标,就能避免出现“某些类异常健壮,而其他类勉强够健壮”的现象。

17.关于“买”还是“造”的决策(Buy-vs-Build Decision)

18.关于复用的决策(Reuse Decisions)

19.变更策略(Change Strategy)

20.架构的总体质量(General Architectural Quality)

架构应该是带有少许特别附加物的精炼且完整的概念体系。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容