软件架构设计

软件需求:

软件需求 = 功能需求 + 质量属性 + 约束


约束是架构设计要解决的问题的上下文


不同需求影响架构的不同原理,是架构设计思维的基础






五维三级需求法——业务分析、范围协商过程:
















软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。

软件架构设计就是从宏观上说明一套软件系统的组成与特性。

ADMEMS是Architecture Design Method has been Extended to Method System的简称,ADMEMS通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作内容。其中“3个阶段”是指预备架构阶段(PA阶段)、概念架 构阶段(CA阶段)、细化架构阶段(RA阶段),“1个贯穿环节”是指对非功能目标的考虑。








架构设计方法首先应当是多阶段的,其次才是多视图的;阶段是先后关系,视图是并列关系。










PA阶段的任务是全面理解需求,从而把握需求特点,进而确定架构设计驱动力;
CA阶段必须考虑包括功能、质量、约束在内的所有方面的需求;
RA阶段的总体方法为5视图方法,涉及逻辑架构、物理架构、开发架构、运行架构和数据架构。

PA阶段:ADMEMS矩阵法








CA阶段:重大需求塑造概念架构


概念架构满足“架构=组件+交互”的基本定义,只不过概念架构仅关注高层组件

概念架构对高层组件的“职责”进行了笼统的界定,并给出了高层组件之间的相互关系

概念架构不应涉及接口细节





RA阶段:落地的5视图方法





软件架构设计的方式方法:



逻辑架构的重点是考虑软件功能性需求:





开发架构重点关注的是开发编码实现方面的问题:





数据架构不仅仅要考虑开发中涉及到的数据库,实体模型,也要考虑物理架构中数据存储的设计:





运行架构关注的不再是全局而是局部,着重关注那些关键点与难点,常常需要技术攻关与预研。主要考虑控制流、通讯机制、资源争用、锁机制、同步异步、并发、串行,同时也要考虑质量属性:





物理架构主要考虑硬件选择和拓扑结构,软件到硬件的映射,软硬件的相互影响:





质疑驱动的逻辑架构设计的整体思路:





逻辑架构设计的10条经验:





划分子系统原则:





为了得到客户经常性的反馈,快速迭代有个基本前提:开发应该“深度优先”,而不是“广度优先”。


广度优先极端情况下意味着对每一个功能进行定义,然后对每个功能进行设计,接着对每个功能进行编码,最后才对所有功能一起进行测试。而深度优先极端情况下意味着对每个功能完整地进行定义、设计、编码和测试,而只有当这个功能完成了之后,你才能做下一个功能。当然,两个极端都是不好的,但深度优先要好得多。对于大部分团队来说,应该做一个高级的广度设计,然后马上转到深度优先的底层设计和实现上去。


如何通过关注点分离来达到“系统中的一部分发生了改变,不会影响其他部分”的目标呢?

首先,可以通过职责划分来分离关注点。面向对象设计的关键所在,就是职责的识别和分配。每个功能的完成,都是通过一系列职责组成的“协作链条”完成的;当不同职责被合理分离之后,为了实现新的功能只需构造新的“协作链条”,而需求变更也往往只会影响到少数职责的定义和实现。

其次,可以利用软件系统各部分的通用性不同进行关注点分离。不同的通用程度意味着变化的可能性不同,将通用性不同的部分分离有利于通用部分的重用,也便于对专用部分修改。

另外,还可以先考虑大粒度的子系统,而暂时忽略子系统是如何通过更小粒度的模块和类组成的。





“分”是手段,“合”是目的


协作决定接口



















猜你喜欢

转载自maosheng.iteye.com/blog/2275290