读微软架构指南1

1 什么是软件架构

如下是几个对软件架构的理解:

  • 应用软件架构(architecture)是指一个过程,在这个过程中来定义一个合理的软件结构,这个结构满足所有的技术和操作需求,同时保证更优的软件质量。软件质量参数包括性能,安全性,可管理性,以及保证应用软件最后能够成功问世等内容。
  • 应用软件架构过程是围绕着一系列的重要决策进行,这些决策包括:系统构件的选择,构件间接口的设计,构件间如何进行组合,各个构件的行为以及它们之间如何配合工作,如何将这些构件以及行为元素组成更大的子系统,以及选择一个总领全局的架构风格。软件架构过程还包括功能性,可靠性,性能,可重用,可理解,经济性以及技术条件约束,各种决策的取舍以及审美的考量。
  • 从这个系统的顶层出发,将系统分解为若干小的子系统,分解后的每个子系统又有其自身的架构方案,且这些方案通常会随软件系统的生命期不断变化,最后,架构即浓缩为最终剩下的一些最为重要的系统内容。
  • 软件架构过程即一个动态决策和设计进化的过程。
  • 软件架构也可以理解为是一个最终形态,即软件或系统的结构。其中的组成元素即各种软件组件。这些组件从外部看,只有其公共接口,以及不同组件间的关系。架构只是这些公共的,外部直接可见的接口及关系(或协作)。而组件的内部细节,并非架构所关注的内容。

1.1 软件架构的重要性

其实软件的架构和现实世界中的工程的架构都是一个意思,即进行构建。

任何软件都必须在一个坚实的基础上建立起来。虽然现代软件工具可以简化构建的实施过程,但它们无法简化或自动完成软件的架构设计。

软件架构过程中需要考虑的因素有三点:

  • 用户
  • 底层支撑平台
  • 具体业务要求

而在架构过程中,时常在这三者间进行折中,进行平衡。例如,总体的用户体验总是由业务和底层平台来实现的,如果将业务或者底层平台做修改,就可能引起用户体验的极大变化。另外,如果对用户体验需求进行改变,也可能极大影响到业务的设计以及底层系统的选择。

性能可能是一个主要的用户体验目标以及业务目标,但对于底层系统来说,这个目标不会总是在考虑范围之内。必须针对这个目标,在三者中进行一个平衡。

软件架构的一个主要关注点是构成系统的构件之间如何进行交互。

而构件的数据结构和算法或实现细节则是设计过程中的关注点。

不过有些时候,架构关注点和设计关注点时常重叠,一般情况下,不要去硬生生将二者分离,而是将二者结合考虑。只有在特征十分明显的前提下,才分架构关注点和设计关注点来分别进行考虑。

在进行软件架构过程时,考虑如下高层次的关注内容:

  • 用户是如何使用这个app的?
  • 应用如何被部署到生产环境,如何在部署后进行管理?
  • 应用的质量属性需求都有哪些?比如安全性、性能、多线程能力、国际化以及可配置性。
  • 如何进行架构,以保障应用随时间推移的情况下,仍然有足够的灵活性来应对未来的维护要求?
  • 当前业界架构的趋势是什么?这种趋势是否会对应用的未来产生影响?

1.2 软件架构的目标

软件架构的任务是在业务需求和技术需求间架设一座桥梁。即架构过程中首先会明确用例,而后寻找实现这些用例的途径,最终构成一个可用的软件系统。

架构的目标是识别需求中会影响到软件结构的各种内容。

好的软件架构能够在技术实现过程中,尽量降低有关业务风险。

一个好的设计必须足够灵活,能够适应随时间推移由软硬件技术改变所引起的变化。

架构必须考虑总体的设计决定,以及各种决策的权衡。

记住如下架构原则:

  • 暴露系统结构,隐藏实现细节
  • 明确所有可能的用例及使用场景
  • 尽可能搜集到更多目标用户的需求
  • 要处理功能性和质量性的需求

1.2.1 软件架构概览

首先要了解软件架构过程中影响到决策的一些因素,以及其中哪些因素会在未来对软件架构产生影响。

这些决定性因素主要由用户的意愿,产品性能以及环境的适应性所驱动。

以下是一些决定性因素:

  • 使用场景
  • 市场成熟度
  • 设计灵活性
  • 未来趋势

1.3 架构设计的一些主要原则

首先,在进行架构设计时,前提条件是这个设计会随时间不断发生变化,而当前的你无法预知之后的各种可能情况,也就是说无法在当前就设计一个架构可以满足未来的一切需求。

架构的设计需要随着系统的施工过程不断进化,因为这个过程中,会对面对的问题不断加深理解,并且现实世界中的需求也不断驱动架构的更新。

所以在架构设计过程中,必须要抱着进化的观点来看问题(新奥法施工隧道),这样的架构才能适应未来各种新需求。

在架构设计时,时刻关注如下问题:

  • 在整个架构设计过程中,有哪些内容是不能被理解错的(如果理解错了就会导致整个软件系统无效,或是会给整个系统带来巨大风险)?
  • 架构中有哪些部分是可变的?或者是哪些部分能够在未来延迟设计而不会影响到当前整个架构?
  • 架构设计过程中,都有哪些基本假设?你又是如何测试这些假设的?
  • 当什么情况发生时,会驱使你重构这个设计?

不要过度设计!不要做一些无法被验证或测试的假设!如果遇到这样的情况,将这些选项保留,在未来的架构中再加入它们。

需要明确哪些是架构中的基础性内容!如果这些内容设计错误,将会导致架构的重新设计,进而造成巨大损失。

1.3.1 架构设计准则

在架构设计时,需要记住如下原则:

  • 以变化为前提进行设计,而非一次设计永远不变。
  • 建模分析(如UML),降低风险。首先这个建模只是分析模型,不要过早进行详细设计,更不要以分析模型作为设计过早定型。
  • 利用模型和视图作为交流和沟通工具。好的架构设计内容、决策内容以及未来设计变化三者的有机结合。利用模型、视图以及其他可视化工具来将架构呈现给更多的人,并将决策所引起的变化更快引入到已设计的架构中。
  • 认真学习前人总结的关键工程决策内容,融入再总结。

尽量考虑使用一种增量的和迭代的方式来改善架构。

首先由一个架构骨架开始,对架构有一个总体的正确性验证,而后不断变化,生成更多的迭代架构,再对这些架构进行测试和修改优化。

不要尝试在第一次就把所有东西都全部完善,迭代有一个过程,设计过程中的每个决定都是建立在对需求和假设可测试的基础上的。

将设计细节加入,测试通过,再进行下一轮迭代,加入设计细节,再测试通过,如此往复。这样的过程可以保证设计决定的大方向是对的,之后只需要再次对设计细节进行完善即可。

一个常犯的错误是过早进入到设计细节中,然后却由于错误的假设将设计引向万劫不复的深渊。

另外一个常见错误就是没有或者是无法对架构进行评估。

故在测试架构时,需要记住问自己如下问题:

  • 这个架构中的假设都有哪些?
  • 架构中显式地或隐含地满足了哪些需求?
  • 这样的架构中有哪些关键风险?
  • 为缓和这些关键风险,可以有哪些对策?
  • 和上一个迭代架构相比,这个架构在哪些方面有所提升?

另外一些推荐阅读书籍:

Software Architecture in Practice

Patterns of Enterprise Application Architecture

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

推荐阅读更多精彩内容