如何进行成功的架构设计
通过对架构进行的5种视图的角度来看,一个优秀的架构应该具有以下特点:
1. 从开发角度,应该有良好的模块化,每个模块职责清晰,模块之间松耦合。模块内部高聚合。
2. 从逻辑角度,适应了功能需求的变化,适应了技术的变化。
3. 从运行角度,对系统的动态运行有良好的规划,可以标识出哪些是主动模块,哪些是被动模块。
4. 从数据角度,对数据进行了良好的规划,不仅包括数据的持久化存储方案,还可能包括数据传递、数据复制、数据同步等。
5. 从物理角度,可以进行明确、灵活的部署规划。
一个成功的架构设计所需要的关键因素
1. 是否遗漏了至关重要的非功能性需求。
客户不仅关心功能的实现,更关心功能实现的好坏,5秒打开一个网页和10秒打开一个网页对客户来说意义有时是完全不一样的。很多项目甚至产品功能性的需求都实现了,最后却栽倒在非功能性的需求上。
非功能性需求从哪里来?
来自用户。例如性能、易用性。为用户而设计,不仅要满足用户要求的功能,也有达到用户期望的质量。
来自开发人员和维护人员。例如可扩展性、可重用性、可移植性。一个拙劣的设计,会使开发和维护变成一场噩梦。
来自客户组织。例如预算限制、上线时间。
非功能性需求分为质量属性和约束两种,质量属性是软件系统的整体质量品质,往往与大多数功能有关,例如易用性、性能、可伸缩性、持续可用性、鲁棒性、安全性、可扩展性、可重用性、可移植性、易理解性、易测试性等。至于约束,要么是架构设计中必须遵守的原则,例如一些硬件或者软件的限制,要么转化为质量性需求或者功能需求。
2. 能否适应频繁的需求变更。
分离变化点。架构应该能够支持业务功能在一定范围内变化。
3. 不同的视图是否一致、同步。
架构师应该掌握趋于系统化的方法,在分而治之的大前提下,也要注意综合考虑,注意各个视图之间的同步。
4. 架构是否及时得到验证。
原型测试。
制定架构设计策略
1. 全面认识需求。
2. 关键需求决定架构。
3. 多视图探索。
4. 尽早验证。
全面认识需求
一方面,需求是应该分层的,同一个项目,在客户眼中和在开发人员眼中的意义完全是不一样的。一般可以分为组织级(客户)、用户级(最后使用系统的人)和开发级。
另一方面,需求应该被分为不同的类型。包括功能性需求和非功能性需求,非功能性需求分为质量属性和约束。
关键需求决定架构
架构师没有必要对所有需求都深入了解,这是策略。
1. 功能需求数量众多,应该控制架构设计时需要详细分析的用例的个数。
2. 不同质量属性之间往往是相互制约的,这时需要一个权衡。
关键需求决定架构有利于集中精力深入分析最重要的需求。
多视图探索架构
分而治之。这样可以在每种视图时专注系统的某一方面。
尽快验证
一般有两种验证方式
1. 原型方式。通过开发一个垂直演进原型,来实现软件架构。
2. 框架方式。或者说框架 + 垂直抛弃原型。
参考文献
《软件架构设计》 温昱