架构设计
软件架构设计是程序员提升自己的目标之一。掌握架构设计能力,不论对技术水平的提升,还是对职业生涯的发展,都十分有益。
架构是由需求驱动的;
架构师是一种工作角色而不应该只看作一个职位;
架构设计可以由一个人完成也可以由团队共同完成;
架构师应该适量编码以保持对技术的敏感性;
架构设计时需要综合考虑以下方面:功能需求、质量属性(非功能需求)、约束、原则等;
架构设计更依靠软技能,即沟通、协调、技术领导力等;
架构设计涉及一系列重要决策,重要程度根据重新进行架构设计消耗的成本大小排序;
可以将架构看作一个系统的完整抽象,系统的各个干系人从各自的角度看待架构,都只是完整的架构的一部分,因此为了更好的与各类干系人交流,需要呈现架构的某一的方面;同时从多个不同视角设计架构,也可以更好的完成设计(不用同时关注架构的各个方面,被各种不同视角的概念打乱思维)。可以类比一下盲人摸象,象原本是一个整体,但是各个盲人从自己的角度,只能看到象的一部分。这种从局部到整体、从整体到局部的认知过程,在架构设计中是非常有用的。
其实对于日常生活中的各种事情来说,这种从多个不同视角对事物进行观察思考的想法也是非常有用的。
架构设计三大原则:合适原则、简单原则、演化原则[1]。
架构设计的驱动力 = 功能 + 质量 + 约束
相关概念[2]
- 系统、子系统,不同层级的类似对象的命名,系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。
- 模块、组件,从业务逻辑的角度来拆分系统后,得到的单元就是“模块”;从技术实现的角度来拆分系统后,得到的单元就是“组件”。划分模块的主要目的是职责分离;划分组件的主要目的是单元复用。
- 框架、架构,软件框架(Software Framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。
五种常见的软件架构[3]:
1)分层架构;
2)事件驱动架构;
3)微内核架构;
4)微服务架构;
5)云架构;
概念架构:是直指目标关键设计重大决策
概念架构是一个系统所有干系人的共同语言,它是系统的顶层设计,即仅对系统的最高层次组件和交互进行设计,不涉及具体的接口。
概念架构如何做?应该左手抓“功能”,右手抓“质量”,立足于“约束与原则”,将问题领域的需求合理转化为解决方案领域的设计
ADMEMS是Architecture Design Method has been Extended to Method System的简称,是由CSAI顾问团架构设计专家组于2009年11月在第六届中国软件大会上公开发布的一个软件架构设计方法。作为方法体系,ADMEMS通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作内容。其中“3个阶段”是指预备架构阶段(PA阶段:把握需求特点,确定架构驱动力)、概念架构阶段(CA阶段:根据重大需求,确定概念架构)、细化架构阶段(RA阶段:细化架构设计,关注不同视图),“1个贯穿环节”是指对非功能目标的考虑
- ADMEMS将Pre-Architecture阶段分为四个步骤,即需求结构化、分析约束影响、确定关键质量、确定关键功能。ADMEMS矩阵”是Pre-Architecture阶段的核心方法。 “ADMEMS矩阵”又称为“需求层次-需求方面矩阵”,帮助架构师告别需求列表的陈旧方式,顺利过渡到二维需求观,借此避免遗漏需求、并进一步理清需求间关系和发现衍生需求。
    - 需求结构化:用ADMEMS矩阵方法进行需求结构化,“ADMEMS矩阵”,也称为“需求层次-需求方面矩阵”。层次分为:业务级需求、用户级需求、开发级需求;方面分为:“功能(需求)”,“质量(需求)”,“约束)。
     - 分析约束影响:约束分类理论,将约束根据干系人(客户、用户、开发者)分类为客户方约束,用户方约束,开发运维方约束,还有一类“技术环境”约束,它与前述3方干系人都有关系。一句话:约束是架构设计的上下文
Conceptual Architecture,即概念架构。概念架构不是理想架构,同样概念架构也不是概念视图,概念架构作为架构设计的一个阶段,必须在细化架构设计阶段之前,针对重大需求、特色需求、高风险需求的要求,给出高层的解决方案,形成稳定的高层架构设计成果。ADMEMS将Conceptual Architecture阶段分为三个步骤,即:初步设计:基于关键功能,借助鲁棒图行以发现职责为目的的初步设计;鲁棒图主要包括三大元素,即边界对象,控制对象和实体对象,可类比与MVC,但与MVC又不同; 高层分割:对系统这个黑盒进行高层切分,如切分复杂系统为多个二级系统,或者直接切分系统为具体子系统;实践中最常用的系统切分方式为分层,有Layer(逻辑层)、Tier(物理层)、按通用性分层技术堆叠等流派。 考虑非功能需求:概念架构并非理想化架构,因此不仅要考虑功能,也必须考虑非功能,通常采用的方法为,目标-场景-决策表。 - Refined Architecture是相对于Conceptual Architecture而言的,即细化架构。ADMEMS主要通过5视图法对细化架构阶段进行实践。5视图法的主要思想为:错落有致地将众多技术关注点划分“群落”,“群落”内高聚合,“群落”间松耦合。应用5视图方法,便于架构师设计思维的“有序”展开。不同视图源于不同的思维角度及不同的技术关注点,即: 逻辑架构:关注如何划分子系统、如何定义接口、如何运用质疑驱动的思维套路等; 物理架构:关注硬件选择与物理拓扑、软件到硬件的映射关系、方案优化; 运行架构:关注确定引入哪些控制流、确定每条控制流的任务、处理相关问题、进一步考虑控制流之间的同步关系等; 开发架构:关注将“逻辑职责”映射为“程序单元”、开发技术选型、“程序单元”间的关系等; 数据架构:关键是确定数据分布方案。数据分布的6种策略:独立、集中、分区、复制、子集、重组; 非功能目标的设计环节:非功能目标的设计是以场景技术为核心手段、以目标-场景-决策表为思维工具致力于支撑非功能目标的理性设计过程。经过非功能目标的设计,将使得架构设计更有针对性、可操作性更强、避免过度设计,同时便于系统升级时参考。 目标-场景-决策表方法,可以帮助架构师快速进入非功能目标的设计思维,更理性地应对架构师普遍感到棘手的非功能支持问题,提升自己的核心竞争力。
非功能需求不可能是“速决战”,它必然是“持久战”,连编码都会影响到性能动能非功能属性,更何况概念架构设计和细化架构设计呢?所以架构师必须注意,非功能目标的考虑是纵穿架构师设计始终的环节。
ADMEMS方法3个阶段和1个贯穿环节:PA->CA->RA阶段,1个贯穿指对非功能目标的考虑,该方法实现需求进,架构出
References:
[1] 架构设计三大原则:https://www.douban.com/note/673690535/
[2] 软件架构相关概念解析:https://cloud.tencent.com/developer/article/1372372
[3] 五种常见的软件架构:https://zhuanlan.zhihu.com/p/94665982
[4] 软件架构师应该知道的97件事:https://wenku.baidu.com/view/e4c139e49b89680203d8255e.html
[5] 概念架构设计方法之一-鲁棒图:https://www.cnblogs.com/moonsoft/p/10612046.html
[6] 软件架构设计ADMEMS方法体系:https://www.cnblogs.com/doit8791/p/9446797.html
[7] 五种视图法设计架构:https://www.cnblogs.com/doit8791/p/9434549.html
[9]


Post a Comment