软件架构设计模式与实践
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 软件系统的需求种类复杂
• 什么是软件架构视图
• 个架构视图是对于从某一视角或某一点上看到的系统所做的简化描述, 描述中涵盖了系统的某一特定方面,而省略了于此方面无关的实体。
• 架构要涵盖的内容和决策太多了,超过了人脑“一蹴而就”的能力范围, 因此采用“分而治之”的办法从不同视角分别设计;同时,也为软件架构 的理解、交流和归档提供了方便。
和评估监控等工作提供清晰的基础。
软件架构视图
——让设计建模更明白、更有效
张云贵
2010-05-21
“系统架构图”?
• 架构设计的多重视图
• 从根本上来说是因为需求种类的复杂性所致。 • 比如一个媒体发布系统:
• 功能需求:wenku.baidu.com户可以通过浏览器浏览媒体的发布。据此初步设计出采用浏览器插件 的方案;
“系统”。 • 一个大型企业往往使用多套系统,多套系统通过互操作形成“集成系
统”。
• 软件单元的粒度是相对的。同一个软件单元,在不同场景下我们会以不 同的粒度看待它。
• 架构(Architecture)与框架(Framework)。
• 框架只是一种特殊的软件,框架也有架构。
• 可以通过架构框架化达到“架构重用”的目的,如很多人都在用 Spring 框架提供的控制反转和依赖注入来构建自己的架构。
• 因为它是跨越现实世界与计算机世界之间鸿沟的一座桥。 • 软件架构设计要完成从面向业务到面向技术的转换,在鸿沟上架起一座
桥梁。 • 需求 -> 架构设计 -> 软件架构 -> 系统开发 -> 软件系统
• 软件架构对新产品开发的作用:
• 上承业务目标。 • 下接技术决策。 • 控制复杂性。
• 先进行架构设计,后进行详细设计和编码实现,符合“基于问题深度分而治之”的 理念。
运行中出现的各种问题。
• 系统架构师的目的: • 对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握。
• 系统架构师能力要求: • 一、系统架构相关的知识和经验。 • 二、很强的自学能力、分析能力、解决问题的能力。 • 三、写作、沟通表达、培训。
23
• 角色 • 软件架构师Software Architect • 定义 • 主导系统全局分析设计和实施、负责软件构架和关键技术决策的
32
软件架构师的知识结构
• 业务知识
• 深入了解系统建设的业务需求。 • 了解系统的非功能需求和运行维护需求。 • 了解企业 IT 公共设施、网络环境、外部系统。
33
软件架构师的思维方式
• 基于框架的思维
• 架构设计的层次(Enterprise, Application, etc) • IT 的生命周期(What, Why, Where, How, When,
30
软件架构师在干什么?
• 思考、思考、再思考
• 深入理解、准确把握建设的业务需求 • 分析所有可见的问题、障碍、风险 • 充分参考已有的成功方案,降低风险
• 交流、讨论、博弈、质疑
• 对构思中的方案不断提出质疑,避免漏洞 • 广泛听取各层面的意见,开拓思路 • 反复质疑、逐步完善已有的设计构思
• 在动手实现之前验证设计方案的正确性
• 约束条件:不能影响用户浏览器的安全性;细化设计方案,需要对插件进行认证, 自动判别客户端是否存在,及版本比较;自动下载注册等。
• 使用期质量属性:为保证浏览的流畅,应减少中间等待的时间,因此应对下一步需 使用的媒体做预测等。
• 制作发布期的质量保证:保证在遇到较大的媒体时能保持浏览的流畅,应在发布时 将视频等流式化。
难,诱使开发人员绕过它选择容易但有害的途径,其结果却使系统死的更快。
• 什么是软件架构
• 软件架构的概念很混乱。如果你问五个不同的人,可能会得到五种不同 的答案。
• 软件架构概念主要分为两大流派:
• 组成派:软件架构 = 组件 + 交互。 • 决策派:软件架构 = 重要决策集。
• 组成派和决策派的概念相辅相成。
• 软件架构师作为整个软件系统结构的总设计师,其知识体系、技能和 经验决定了软件系统的可靠性、安全性、可维护性、可扩展性和可移 植性等方面的性能。因此一个优秀的软件架构师必须具备相当丰富的 知识、技能和经验。
• 通过对比软件架构师和系统分析师在软件开发中的职责和角色,不难 发现软件架构师与系统分析师所必需的知识体系也是不尽相同的,系 统分析师的主要职责是在需求分析、开发管理、运行维护等方面,而 软件架构师的重点工作是在架构与设计这两个关键环节上。因此在系 统分析师必须具备的知识体系中对系统的构架与设计等方面知识体系 的要求就相对低些;而软件架构师在需求分析、项目管理、运行维护 等方面知识的要求也就相对低些。
• 组织开发。
• 软件架构方案在小组中间扮演了“桥梁”和“合作契约”的作用。
• 利于迭代开发和增量交付。
• 以架构为中心进行开发,为增量交付提供了良好的基础。在架构经过验证之后,可 以专注于功能的增量提交。
• 提高质量。
• 软 集 式件合从产,一品这个线些公:系共指统的具满 核有足 心一特 资组定 产可集的管开市理发场的得需、到求公。或共任特务性需的求、,软并件且密按集照性预系定统义的方 • 软 架件构产。品线架构:针对一个公司或组织内的一系列产品而设计的通用 • 软件架构对软件产品线开发的作用:
28
• 成为一名合格的软件架构师必须具备的知识
• 信息系统综合知识体系 • 软件架构知识体系
29
? • MORFMC,,M.NSeFt,MOF,RUP,J2EE,Spring,SOA,JUnit, • MVC,UML,XML,Corba,MDA,MDD,Web-Service • RSS,Web2.0,AJAX,Serverlet,Hibernate • IOC, AOP • Ruby On Rails • Rup • BPEL • Workflow Engine • LBS • Oracle • CMMI • MQ •…
25
• 专业技能 • 技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整信息、
众多问题交织一团、模糊和矛盾的情况下,迅速抓住问题要害,并做 出合理的关键决定的能力。 • 具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别 上进行思考。 • 对项目开发涉及的所有问题领域都有经验,包括彻底地理解项目需求, 开展分析设计之类软件工程活动等。 • 具备领导素质,以在各小组之间推进技术工作,并在项目压力下做出 牢靠的关键决策。 • 拥有优秀的沟通能力,用以进行说服、鼓励和指导等活动,并赢得项 目成员的信任。
• 开发视图。开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三 方SDK和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件。开发视图和 逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。
• 运行视图。和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而 这些程序运行起来之后会表现为对象、线程、进程,运行视图比较关注的正是这些运行时 单元的交互问题。
• 物理架构 • 物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和部 署需求”。以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。
• 数据架构 • 数据架构关注持久化数据的存储方案。设计着重考虑“数据需求”。
关系
• 逻辑视图。逻辑视图不仅关注用户可见的功能,还包括为实现用户功能而必须提供的“辅助 功能模块”;它们可能是逻辑层、功能模块等。
• 软件架构要层次化并隔离关注点
• 复杂性是层次化的。 --《人月神话》 • 好的架构设计必须把变化点错落有致地封装到软件系统的不同部分(即关
注点分离)。 • 通过关注点分离,达到“系统中的一部分发生了变化,不会影响其他部
分”的目标。
• 软件单元的粒度:
• 粒度最小的单元通常是“类”。 • 几个类紧密协作形成“模块”。 • 完成相对独立的功能的多个模块构成了“子系统”。 • 多个子系统相互配合才能满足一个完整应用的需求,从而构成了软件
• 固化核心知识; • 提供可重用资产; • 缩短推出产品的周期; • 降低开发和维护成本; • 提高产品质量; • 支持批量定制;
• 架构师应当为项目相关的不同角色而设计:
• 架构师要为客户负责,满足他们的业务目标和约束条件。 • 架构师要为用户负责,满足他们关心的功能需求和运行期质量属性。 • 架构师必须顾及处于协作分工“下游”的开发人员。 • 架构师必须考虑“周边”的管理人员,为他们进行分工管理、协调控制
• 多视图方法是软件架构归档的方法,更是指导我们进行架构设计的思维 方法。
• 逻辑架构 • 逻辑架构关注功能。其设计着重考虑功能需求。
• 开发架构 • 开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可 移植性、易理解性和易测试性等。
• 运行架构 • 运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。 • 其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。
软件架构设计模式与实践
1
目录
• 软件架构视图 • 软件生命周期与软件架构介绍 • 架构设计的GRASP模式 • 质量属性驱动架构设计策略 • 软件架构模式分析及其实际运用 • 架构设计原则 • 面向对象的设计原则 • 架构设计验证 • 数据访问层设计(持久层设计) • 借鉴RUP中的设计流程 • 领域模型及业务逻辑层在架构设计中的实现 • 设计模式本质 • SOA的设计思想 • 软件架构实践 • 软件系统架构实践与剖析
角色
24
• 职责 • 领导与协调整个项目中的技术活动(分析、设计和实施等) • 推动主要的技术决策,并最终表达为软件构架 • 确定和文档化系统的相对构架而言意义重大的方面,包括系统的需求、设计、实施和 部署等“视图” • 确定设计元素的分组以及这些主要分组之间的接口 • 为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风险,并保证相关决定 被有效的传达和贯彻 • 理解、评价并接收系统需求 • 评价和确认软件架构的实现
前言
软件系统开始坏死的症状
• 一个软件系统开始坏死时表现的症状有:
• 硬化Rigidity——系统变得越来越难以变更,修复或增添新功能的代价高昂; • 脆弱Fragility——对系统的任何哪怕是微小的变更都可能造成四处(甚至是
与变更处没有逻辑上的关联之处J崩溃; • 绑死Immobility——抽取系统的任何部分用来复用都非常困难; • 胶着Viscosity——以与原有设计保持一致的方式来对实施变更已经非常困
• 物理视图。和运行视图的关系:运行视图特别关注目标程序的动态执行情况,而物理视图 重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构 视图。
•
软件生命周期与软件架构 介绍
软件架构师的定位
• 系统架构师的职责: • 一、理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架) • 二、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、
26
• 以目标导向和主动的方式来不带任何感情色彩地关注项目结果, 构架师应当是项目背后的技术推动力,而非构想者或梦想家(追 求完美)
• 精通构架设计的理论、实践和工具,并掌握多种参考构架、主要 的可重用构架机制和模式。
• 具备系统设计员的所有技能,但涉及面更广、抽象级别更高。
27
软件架构师的知识体系
31
软件架构师的知识结构
• 软件知识
• 最好要有系统开发全过程经验。 • 对 IT 建设生命周期各个环节有深入了解,包括:系统/模
块逻辑设计、物理设计、代码开发、项目管理、测试、 发布、运行维护等。 • 深入掌握1-2种主流技术平台上开发系统的方法。 • 了解多种应用系统的结构。 • 了解架构设计领域的主要理论、流派、框架。
• 软件架构的作用
• 如果一个项目的系统架构(包括理论基础)尚未确定,就不应该进行此系统 的全面开发。-- Barry Boehm,《Engineering Context》
• 一个缺陷充斥的系统,将始终是一个缺陷充斥的系统。-- Timothy C. Lethbridge,《面向对象软件工程》
• 软件架构设计为什么这么难?