架构设计系列文章,请参见连接。
背景:
1. 学习背景
多年前在学习架构设计的过程中,无意间找到了叫做《架构模式》的架构设计方法论。从哪之后就开始逐渐的深入学习这方面的内容。在简书个人介绍中的:《规则对于智者来说是指导,对于愚者来说是遵从》。其实就是在学习《架构模式》是理解的真理。
在平常的工作过程中,有很多人会以经验的方式去知道具体的工作。遇到无经验可借鉴的时候就束手无策了。往往这些时候就是体现一个人学习能力的时候,所以,就需要一种借鉴其他人经验的方式。而架构模式就是前人为我们总结和模式化的架构设计实践中经验。
2. 内容范围
在软件界有很多种模式的概念,并在之后会推出系列的架构模式文章。所以需要大概的说明一下系列文章的内容范围,以区别其他知识领域并方便的指导学习过程。
在搜索引擎上搜索《架构模式》时,最可能搜到的是Martin Fowler的《企业应用架构模式》。这本书的主要介绍的范围是在软件开发中可能会遇到的各种知识点,以及GoF设计模式的具体落地方式等等。所以,这本书描述的内容基本上在《架构设计01--架构师知识体系》底层的实现技术与设计模式部分。
本文中介绍的内容更多的是《软件体系结构》和《软件体系结构原理、方法与实践》中的内容。这两本书描述从软件架构的层面上通用模式。所以,可以理解为本系列文章的主要内容是介绍软件体系结构。
因为每个人经历、知识体系都是不一样的,并且写文章所要介绍的内容也不尽相同。所以在网上可以找到很多种的架构模式的理解。例如:《10 Common Software Architectural Patterns in a nutshell》,《朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)》,《《软件架构模式》-第一章分层架构(上)》。在这里介绍的内容与其他介绍的内容没有什么好坏之分,只不过在软件体系结构中介绍的内容的细分领域不同。所以,作为一个软件从业人员尽量的多去学习,多去理解才是最终要的。不用进行比较。
概述:
1. 架构设计到底干了什么?
架构的基本需求主要是在满足功能属性的前提下,关注软件质量属性,架构设计则是为了满足架构需求(软件质量)寻求适当的”战术“;
2. 软件架构设计的意义?
- 项目关系人之间的交流平台
在软件过程中,软件系统中会有各种各样的关系人进入。软件系统的多种关系人在不同的时候分别关注系统不同的特性。我们可以从软件架构的"4+1"视图模型中看不同人的需求。
- 早期设计决策
在精益中有个规则,叫做推迟决策。相应的敏捷中也需要支持尽快决策。在软件开发的开发初期可以实现MVP,对其进行各方面的评估与验证。因为在软件过程中不确定因素很多,刚开始很难预测未来的变化,一开始保留较大的弹性。软件需求分三种:功能需求,质量需求和设计约束。在开始进行架构设计时就可以考虑这三种需求来完成相应的决策。
- 在较高层面上体现软件的复用
软件质量中有一条软件可复用性,不要认为软件工程中的规则、原则、指导等都只能停留在它所固定的层次上。软件的可复用性并不只代表代码的复用性,它代表了软件开发层次中的各个层次。在组件化开发中软件可复用性可以体现在组件的服用。在架构设计层面的可复用性,就可以说架构模式了。
- 架构对开发的指导与规范意义不可忽视。
架构的指导意义体现在所有的人员都有一个共同的目标。在团队中一致的目标能让团队更高效的完成任务。并且可以形成软件中的统一语言,方便团队中的沟通。
说明:
1. 以怎样的方式描述架构模式?
根据软件实施经验、并综合架构模式的定义进行对软件架构进行描述。也会说明具体的架构模式的适用范围,以及使用过程中的注意事项。
2. 软件架构的生命周期?
从演进式架构还没有出现时,总有一种模糊的感觉:架构不是一蹴而就的。在遗留系统怎样更新到新架构、现在正在运行的软件产品怎样持续的进行改进、新系统设计时怎样考虑它的可扩展行?这些都是对软件架构的要求。所以,一直在思考,但是《演进式架构》出现后才真正的理解。
3. 架构模式分类
GoF为我们总结了23种设计模式。我们在这里说明10种架构模式。具体类型为:
参考:
设计恰如其分的架构
新书推荐 | 拥抱变化:演进式架构设计
技术实践如何支持演进式架构和持续集成
微服务即演进式架构
微服务和演进式架构