如何进行成功的架构设计

通过对架构进行的5种视图的角度来看,一个优秀的架构应该具有以下特点:

1.       从开发角度,应该有良好的模块化,每个模块职责清晰,模块之间松耦合。模块内部高聚合。

2.       从逻辑角度,适应了功能需求的变化,适应了技术的变化。

3.       从运行角度,对系统的动态运行有良好的规划,可以标识出哪些是主动模块,哪些是被动模块。

4.       从数据角度,对数据进行了良好的规划,不仅包括数据的持久化存储方案,还可能包括数据传递、数据复制、数据同步等。

5.       从物理角度,可以进行明确、灵活的部署规划。

一个成功的架构设计所需要的关键因素

1.       是否遗漏了至关重要的非功能性需求。

客户不仅关心功能的实现,更关心功能实现的好坏,5秒打开一个网页和10秒打开一个网页对客户来说意义有时是完全不一样的。很多项目甚至产品功能性的需求都实现了,最后却栽倒在非功能性的需求上。

非功能性需求从哪里来?

来自用户。例如性能、易用性。为用户而设计,不仅要满足用户要求的功能,也有达到用户期望的质量。

来自开发人员和维护人员。例如可扩展性、可重用性、可移植性。一个拙劣的设计,会使开发和维护变成一场噩梦。

来自客户组织。例如预算限制、上线时间。

非功能性需求分为质量属性和约束两种,质量属性是软件系统的整体质量品质,往往与大多数功能有关,例如易用性、性能、可伸缩性、持续可用性、鲁棒性、安全性、可扩展性、可重用性、可移植性、易理解性、易测试性等。至于约束,要么是架构设计中必须遵守的原则,例如一些硬件或者软件的限制,要么转化为质量性需求或者功能需求。

2.       能否适应频繁的需求变更。

分离变化点。架构应该能够支持业务功能在一定范围内变化。

3.       不同的视图是否一致、同步。

架构师应该掌握趋于系统化的方法,在分而治之的大前提下,也要注意综合考虑,注意各个视图之间的同步。

4.       架构是否及时得到验证。

原型测试。

制定架构设计策略

1.       全面认识需求。

2.       关键需求决定架构。

3.       多视图探索。

4.       尽早验证。

全面认识需求

一方面,需求是应该分层的,同一个项目,在客户眼中和在开发人员眼中的意义完全是不一样的。一般可以分为组织级(客户)、用户级(最后使用系统的人)和开发级。

另一方面,需求应该被分为不同的类型。包括功能性需求和非功能性需求,非功能性需求分为质量属性和约束。

关键需求决定架构

架构师没有必要对所有需求都深入了解,这是策略。

1.       功能需求数量众多,应该控制架构设计时需要详细分析的用例的个数。

2.       不同质量属性之间往往是相互制约的,这时需要一个权衡。

关键需求决定架构有利于集中精力深入分析最重要的需求。

多视图探索架构

分而治之。这样可以在每种视图时专注系统的某一方面。

尽快验证

一般有两种验证方式

1.       原型方式。通过开发一个垂直演进原型,来实现软件架构。

2.       框架方式。或者说框架 + 垂直抛弃原型。


参考文献

《软件架构设计》   温昱

posted @ 2008-07-17 22:20  李潘  阅读(788)  评论(0编辑  收藏  举报