架构之美

美的核心在于概念完整性——即一组抽象和规则,在整个系统中尽可能简单地应用它们。

我们将计算机系统的架构定义为一组最小的特征集它们决定了哪些程序将运行,以及这些程序将得到什么结果。

架构是一种折中——决定改进其中一个特征常常会对其他特征产生负面影响。架构师必须确定怎样做是足够好的,方法就是发现特定系统的重要关注点,以及充分满足这些关注点的条件。

外部行为描述展示了产品如何与它的用户、其他系统和外部设备进行交互,这应该表现为需求。结构描述展示了产品如何划分为多个部分,以及这些部分之间的关系。我们还需要内部行为描述,用于描述组件之间的交互接口。结构上的描述常常展示相同部分的一些不同视图,因为不可能把所有信息以有意义的方式组织到一张图纸或一份文档中。一个视图中的组件,可能是另一个视图中一个组件的一个部分。

典型的利益相关人和他们的关注点包括:

• 投资人,他们想知道项目是否能够在给定的资源和进度约束下完成。

• 架构师、开发人员和测试人员,他们首先考虑的是最初的构建和以后的维护与演进。

• 项目经理,他们需要组织团队,制定迭代计划。

• 市场人员,他们想通过品质特点实现与竞争者的差异化。

• 用户,包括最终用户、系统管理员,以及安装、部署、准备、配置人员。

• 技术支持人员,他们关注帮助平台电话呼入的数目和复杂性。

架构师的第一项任务,就是与利益相关人协作,理解这些品质关注点和约束,并为它们排列优先级。

重要关注点包括:

• 功能性

• 可变性

• 性能

• 容量

• 生态系统

• 模块化

• 可构建性

• 产品化

• 安全性

架构结构

• 信息隐藏结构

模块间最基本的关系是“整体-部分”关系。第二种信息隐藏模块结构是基于程序和模块之间的“包含”关系。

满足的关注点:信息隐藏结构的设计应该能满足可变性、模块化和可构建性的要求。

• 使用结构

使用结构确定了我们可以构建并测试怎样的工作子集。

满足的关注点:产品化和生态系统

• 进程结构

信息隐藏结构与使用结构属于静态结构,进程结构属于运行时结构。

满足的关注点:性能和容量

• 访问结构

如果这种结构让程序访问的权限最小化,并且严格执行,我们就认为系统更安全。

满足的关注点:安全性

美丽的架构展示了一些普遍原则:

• 一处一个事实

• 自动传播

• 架构也包含构建

• 最少量机制

美丽的架构不会追求最佳,使用最少的机制来满足整体的需求。找到每种情况下的最佳会导致各种容易出错的机制的产生,而用极简的方式来添加机制则会得到更小的、更快的、更健壮的系统。

• 构建引擎

高度可复用

• O(G),增长的阶

• 抵制熵增

简而言之,美丽的架构用更少的机制做更多的工作。

架构是一种很浪费空间的艺术。

软件系统就像一座由建筑和后面的路构成的城市。

重要的是要保持软件设计的品质。坏的架构设计会导致更坏的架构设计。

极限编程(XP)没有贬低设计,它贬低的是不必要的工作。

架构有助于定位功能:添加功能、修改功能或修复缺陷。它为你提供了一个模板,让你将工作纳入到一张系统导航图中。

清晰的架构设计将导致一致的系统。所有决定都应该在架构设计的背景下做出。

软件架构不是一成不变的。需要时就改变它。要想做到可以修改,架构就必须保持简单。牺牲简单性的修改要抵制。

延迟设计决定,直到你必须做出这些决定为止。不要在你还不知道需求的时候就做出架构决定。不要猜测。

必须保持架构品质。只有当开发者们相信它并对它负责时,才能做到这一点。

你的系统应该有一组不错的自动化测试,它们让你在进行根本的架构变更时风险最小。这为你提供了工作的空间。

对你的代码进行单元测试将带来更好的软件设计,所以设计时要考虑可测试性。

好的项目计划将带来优质的设计。分配足够的时间来创建架构杰作,它们不会立即出现。

团队的组织方式必然对它产生的代码有影响。随着时间的推移,架构也会影响到团队协作的好坏。当团队瓦解时,代码的交互就很糟糕。当团队协作时,架构就集成得很好。

好的架构是很多因素的结果,包括以下方面(但不限于此):

• 确实进行有意为之得前端设计。

• 设计者的素质和经验。

• 在开发过程中,保持清晰的设计观点。

• 授权团队负责软件的整体设计,而团队也承担起这一责任。

• 不要害怕改变设计:没有什么是一成不变的。

• 让合适的人加入到团队中,包括设计者、程序员和经理,确保开发团队的规模合适。确保他们具有健康的工作关系,因为这些关系将不可避免地影响代码的结构。

• 在合适的时候做出设计决定,当你知道所有必要信息时再做出决定。延迟那些暂时不能做出的决定。

• 好的项目管理,以及合适的最后期限。

绝不要失去神圣的好奇心。——爱因斯坦

在线游戏和虚拟世界显然已经找到了办法来实现伸缩性,以应对数量巨大的用户。目前分为两类方法:

第一类实质上是基于地理位置来实现的。第二种处理游戏或虚拟世界中拥塞区域的方法叫做分区。

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

推荐阅读更多精彩内容