`
maosheng
  • 浏览: 550668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

软件架构设计

 
阅读更多
软件架构对新产品开发的作用:
      上承业务目标
      下接技术决策
      控制复杂性


软件需求:

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


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


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






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
















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

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

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条经验:





划分子系统原则:





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


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


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

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

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

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





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


协作决定接口





架构是一种平衡手段,架构为特定的目标服务,通过平衡资源的分配从而达成有限的资源下实现特定的目标。

通常,我们做架构设计的目标是平衡空间、时间、可靠性、复杂度、可维护性、易用性、成本等等指标,选择应用更迫切需要满足的指标优先满足,同时尽可能的减少对其他指标的影响。简单说,架构就是要明确取舍。而且,我们选择的架构不能够影响应用本身的业务逻辑,也就是说架构对应用来说应该是透明的。









  • 大小: 56.7 KB
  • 大小: 307.2 KB
  • 大小: 108.2 KB
  • 大小: 39.8 KB
  • 大小: 22.5 KB
  • 大小: 17.9 KB
  • 大小: 16.8 KB
  • 大小: 10.4 KB
  • 大小: 79.6 KB
  • 大小: 84 KB
  • 大小: 98.1 KB
  • 大小: 52 KB
  • 大小: 51.4 KB
  • 大小: 106.8 KB
  • 大小: 89 KB
  • 大小: 80.6 KB
  • 大小: 69.7 KB
  • 大小: 68.5 KB
  • 大小: 39.6 KB
  • 大小: 48.5 KB
  • 大小: 152.1 KB
  • 大小: 85.4 KB
  • 大小: 24.7 KB
  • 大小: 156 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics