红色有角F叔对《恰如其分的软件架构》的笔记(7)

恰如其分的软件架构
  • 书名: 恰如其分的软件架构
  • 作者: George Fairbanks
  • 副标题: 风险驱动的设计方法
  • 页数: 376
  • 出版社: 华中科技大学出版社
  • 出版年: 2013-9-1
  • 概述
    开发者把问题分割为规模更小且易于处理的若干子问题,这样他们就可以运用相似问题的知识来解决某些子问题,而且使用抽象有助于他们进行推理和判断。
    正如 Fred Brooks 所说,世间不存在任何银弹可以瞬时排除软件开发的艰难险阻。然而,应该去寻觅各种武器,以便更好地分割系统、提供知识,并利用抽象来揭示问题的本质。
    软件架构正是这样的武器。... 它并不是要扼杀创造力,而是使得开发者可应用其创造力去构建规模更大、复杂度更高的系统。
    开发者施加这些约束,是为了使推导系统变得更简单。...开发者对系统主动施加一些约束,可以增强他们的推理能力。
    1968 年,Edsger DIjkstra 写了一篇至今仍依旧具有影响力的文章《Goto 是有害的》,文中主张结构式编程。... 今天,回顾这场辩论,很难想象那些持有不同意见者的猛力抨击;然而在彼时,会有如此大的阻力却也不足为怪。开发者已习惯与那套老式的抽象打交道。他们的目光只看到了新抽象带来的约束,却忽略了它所具备的优势;他们揪住那些结构式编程不善处理的问题不放,而实质上,这些问题不过是细枝末节。伴随着每一轮新的抽象观念的诞生,总会有那么一群迷恋骸骨的守旧者,这些人只知道抱残守缺,却不知与时具进。
    敏捷对于软件开发过程的最大贡献并非设计的抽象,而是提供了一些能够改善设计的技术。
    just enough architecture:如果能够预见某些风险可以通过重构解决,就可以停止架构设计了。
    对于封装好的组件或模块,可以自由地改变其内部实现,而不会影响到它的用户。只有封装是有效的,这些组件或模块的构建者才能获得这种自由。
    2016-09-10 21:43:17 1人喜欢 回应
  • 软件架构
    若要理解某个系统(例如,美国)的架构,就不能死记硬背它的结构,而应该多了解一些相关知识。
    之所以说骨架的隐喻存在不足,是因为架构并不仅仅是那些外部可见的主体部分(即骨骼),某些不可见部分(如约束)通常更为重要。
    系统不做什么与系统能做什么同样重要。要确保系统具备特定的质量属性,就必须施加约束,因而行驶路线缺乏灵活性。但是,这种约束却有助于其他的质量要求,例如,车轮与轨道的摩擦力较小,因而可以提高行进速度。
    Freed Brooks 认为,系统的概念完整性是系统设计的重要目标,因此运用一个始终如一的好主意胜过几个散布于系统各处的奇思妙想。
    人们过去常说,从来没有人因为购买了 IBM 的产品而被炒鱿鱼。由于 IBM 的大型机系统占据了市场的主导地位,因此也就假设挑选 IBM 的系统是合理的。如今,许多领域都有各自占据主导地位的软件架构,正如 IBM 大型机一度所经历的那样。这正是所谓的推定架构(presumptive architectures)。
    推定架构之所以能成功,是因为它能够很好地处理领域中的常见风险。例如,信息技术(IT)系统经常要面对的问题包括对共享数据的并发访问、业务规则的变化及需要长期保留的数据,而分层系统能够很好的解决这些问题。一层处理用户界面,另一层处理业务逻辑,还有一层将数据存入事务型(或常见的关系型)数据库。
    架构提升可以看作是对开发者的一种集权统治,给他们加上了约束的负担,并在统治上保持了官僚主义的作风。或者,也可以把它视为对开发者的解放,还他们以自由,从而使他们专注于功能,而不再是关注于质量属性。
    从本质上,约束是有用的,它可以体现架构师的决断,促进概念的完整性,降低复杂度,并帮助理解系统的运行时行为。
    投入架构中的注意力应该与整个系统可能出现的风险成正比,架构的风险越小,改进的空间就越小。
    2016-09-12 22:40:37 回应
  • 领域模型
    领域表达了关于某一个领域永恒的事实。
    为了避免分析瘫痪,你必须限制领域建模的范围。其中一项技术是,在构建模型前先决定想要模型回答什么问题。
    2016-09-21 22:52:26 回应
  • 质量属性
    质量属性通常是自然产生(emergent)的,因为代码里并没有一个地方来直接负责安全性、可修改性、延时等待,又譬如说,可部署性。这些质量是从架构和设计中逐渐浮现出来的。
    2016-09-25 22:56:47 回应
  • Yanzer 的系统设计之旅
    模块之间通过依赖关系关联。两个模块之间的依赖意味着,当一个模块发生变化时,另一个模块也会发生变化。
    QA 场景对于那些明显可测量的质量属性比较有效,例如,延迟,而对于可维护性和可用性这样的质量属性,效果则没有那么好。
    2016-09-25 22:58:44 回应
  • 代码模型
    内涵-外延:架构模型和源代码之间最大的不同也许在于,架构模型同时包含了具有内涵和外延特性的元素,而代码只包含外延特性的元素。内涵(intensional)特性使用通用的量词,比方说,“所有的过滤器都是通过管道进行通信的”,而外延(extensional)特性元素是枚举式的,比方说,“系统由一个客户端、一个订单处理器及一个订单存储组件构成”。
    模型-代码差异:架构模型包含了一些编程语言中没有(也可能有)的抽象概念,比如组件。此外,架构模型还包含了一些内涵式元素,如设计决策和约束,这些内涵式元素根本不能表达在源代码中。
    了解模型-代码差异,你的第一个反应可能是想避免它。但是,考虑到差异的根源,要想在短期内有一个通用的方案是不太可能的:架构模型是帮助你思考复杂性和规模性的,因为它既是抽象的,又是内涵式的:源代码则是放在机器上执行的,因为它既是具体的,又是外延式的。
    2016-09-25 23:29:29 1人喜欢 回应
  • 层级和分割
    一个关切阻碍了其他关切,这个问题被称为主分解的专横(tyranny of the dominant decomposition)。
    2016-09-26 22:25:30 回应

红色有角F叔的其他笔记  · · · · · ·  ( 全部654条 )

注定一战
1
美国反对美国
1
哲学·科学·常识
1
计算机组成(第 6 版)
2
图解TCP/IP(第5版)
1
沸腾十五年
2
重新理解创业
8
雄性衰落
3
股市真规则
1
资本和收入的性质
2
存在主义是一种人道主义
3
程序员的职业素养
1
何为良好生活
1
活出生命的意义
3
货币的教训
3
Docker——容器与容器云(第2版)
2
政治的人生
4
中国巨债
3
深入浅出React和Redux
5
历史的教训
4
聪明的投资者
8
Designing Data-Intensive Applications
4
投资中最简单的事
5
供给的逻辑
1
逃不开的经济周期
1
图解服务器端网络架构
1
斯坦福极简经济学
3
政治的逻辑
4
原则
5
大数据之路
1
在苍茫中传灯
4
巴菲特传(纪念版)
1
中产阶级如何保护自己的财富
1
指数基金投资指南
4
模式分类
2
深度学习
1
我看电商
2
数据挖掘导论
1
中国国家治理的制度逻辑
2
漫步华尔街
2
尽在双11:阿里巴巴技术演进与超越
2
共同基金常识
3
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战
6
未来简史
2
MySQL DBA修炼之道
1
大国大城
2
计算广告
4
机器学习
1
集体智慧编程
1
重新定义公司
1
Hadoop应用架构
1
第二性
6
硅谷钢铁侠
1
大数据
5
经营的本质
1
人人都是产品经理
7
你凭什么做好互联网
4
Spark机器学习
2
聊聊架构
8
游戏引擎架构
1
美国大城市的死与生(纪念版)
5
给大家看的Photoshop讲座
1
技术的本质
5
我们房地产这些年
2
行动的勇气
2
合作的进化
5
马克斯·韦伯与德国政治:1890—1920
6
数据库索引设计与优化
1
精益企业
7
高可用MySQL
2
发布!软件的设计与部署
2
项目管理艺术
2
右派国家
5
现实感
4
领域驱动设计
11
从0到1
1
高效程序员的45个习惯
1
可扩展的艺术
3
空之境界 上
1
成为技术领导者
1
改革的逻辑
3
修改代码的艺术
9
软件开发者路线图
3
实现领域驱动设计
1
21世纪资本论
9
持续交付
16
构建之法
6
黑格尔导论
19
极端的年代
1
微服务设计
10
Site Reliability Engineering
5
测试驱动的面向对象软件开发
3
城市的胜利
2
对知识的恐惧
5
ZeroMQ
6
现代经济学主要流派
7
数学之美
2
程序员的思维修炼
1
大教堂与集市
1
一切坚固的东西都烟消云散了
5
兜售繁荣
1
数据科学与工程技术丛书
1
政治的细节(第10版)
8
发展研究指南(第二版)
2
代码大全(第2版)
2
企业应用架构模式
9
The Datacenter as a Computer
3
无情的革命
6
新教伦理与资本主义精神
3
人类简史
7
Understanding MySQL Internals
2
他改变了中国
1
态度改变与社会影响
4
复杂
2
民主新论
19
人件
2
国家的常识
4
乌合之众
3
Web Operations
2
个人印象
4
湖上闲思录
2
自由及其背叛
7
C++语言的设计与演化
8
百年中国经济史笔记
1
改变
4
创新与企业家精神
5
Cassandra
3
不敢止步
4
意志力
2
通向财务自由之路
1
制造同意
6
美国种族简史
4
NoSQL Distilled
4
理解专业程序员
2
一个自由主义者的良知
4
政治经济学要义
2
施瓦辛格健身全书
2
房地产的繁荣与萧条
5
为学十六法
2
Akka in Action
1
Java虚拟机并发编程
3
软件工艺
3
面向模式的软件架构,卷3
1
动物精神
4
非理性繁荣
10
MongoDB权威指南
2
海量数据库解决方案
1
Erlang/OTP并发编程实战
1
学术与政治
12
Java并发编程实战
16
论中国
3
金融炼金术
4
多处理器编程的艺术
1
Effective java 中文版(第2版)
1
中國近代史(下冊)
6
系统之美
6
压力下的角逐
2
古代东方史
1
Go 语言程序设计
1
Remote
1
深入Linux内核架构
2
中國近代史(上冊)
3
隐秩序
1
空之境界(上下集合售)
1
开放社会
4
中国近代史八种
5
喀提林阴谋 朱古达战争
1
政治秩序的起源
5
现代性的后果
2
失去的胜利
9
了不起的盖茨比
5
许倬云说历史:台湾四百年
2
大规模分布式存储系统
1
C++网络编程(卷1)
2
在约定的场所
1
中国的宗教
2
了不起的盖茨比
1
希腊罗马名人传(全三册)
2
自私的基因
2
学龠
1
中国政治思想史
4
列克星敦的幽灵
1
人月神话
2
现代体系结构上的UNIX系统
1
虚拟机
2
朱熹的历史世界
1