架构概览

2019-08-04  本文已影响0人  allenliu2017
Architecture.jpeg

前言

这将是一个系列的文章,整理和记录我对软件架构设计的感悟和理解,与大家一起分享经验和教训。

架构是什么

软件系统的设计由开发者的决策和意图构成。设计可以被划分为软件架构详细设计,通常认为架构设计更关注于宏观的、整体的规划和决策,类似建筑行业的顶层设计,例如,我们通常不会在架构设计中考虑该用何种设计模式,这通常体现在针对某一具体业务组件进行的详细设计中。

那么,我们如何区分二者的区别呢?请参考Mary Shaw和David Garland:

随着软件系统规模与复杂度的增长,整个系统结构的设计与规格说明书变得更为重要,甚至超过对算法与运算数据结构的选择。系统的组织,如组件的组合方式;整体的控制结构;用于通信、同步及数据访问的各种协议;针对设计元素的功能分配;设计元素的组合方式;物理分布;伸缩能力及性能;演进的维度;在多个可选设计方案中作出选择。这些都是软件架构层面的事。

回到标题最初的问题,何谓软件架构?我个人比较推崇来自卡内基梅隆大学软件工程研究所(SEI)的定义:

计算机系统的软件架构是解释该系统所需的结合体的集合,其中包括:软件元素、元素之间的相互关系,以及二者各自的属性。

该定义罗列了软件架构中至关重要的要素:元素、关系及属性。就像有人讲计算架构本质上就是三件事情,我们所有的手机、电脑、PC、超算本质上都在处理三件事:计算、存储和通讯一样,我喜欢这样直指本质的简洁表述。

而架构设计呢?我的定义是,

设计者在各种约束条件(时间、成本、利益相关者的关切、未来系统的扩展演进等等)下,针对特定领域,所做出的一系列合理的权衡和决策集合,充分体现了设计者的决策和意图

何时开始&何时结束

架构设计伴随着投入,伴随着成本,那么,与之对应的就是收益和产出,可能是解决当下的问题,但更常见的是预见未来的风险;我个人比较推崇风险驱动的架构设计,过早、过细、超前的架构设计都不一定是合适的,按需的才是合理的,何为按需?权衡风险和收益

从一个项目架构设计开始

此处想基于一个项目作为基础,阐述下当时的理解。之后的系列文章将会更深入的剖析各个板块的经验。

背景

因为涉密,不会涉及到过多的背景,项目特点:

何时开始的?

项目之处就开始做的架构设计。有人讲,不是要先识别风险,排列优先级,然后才开始架构设计吗?架构设计的其中一个收益就是,降低复杂度,而复杂度正是我们最大的风险。当然,还有其他一些原因,例如,利益相关者的关切等等

做了什么事情

翻开我的技术管理-设计阶段的目录结构,我区分了如下几块:


架构设计目录.png

首先,区分架构设计与详细设计:

架构设计我们规划了如下几方面内容:

教训是什么

下一步

分解和细化每一类模块的意图、方案及具体实现。

上一篇 下一篇

猜你喜欢

热点阅读