软件架构设计

上传人:ji****72 文档编号:50178946 上传时间:2018-08-07 格式:PPT 页数:489 大小:6.61MB
返回 下载 相关 举报
软件架构设计_第1页
第1页 / 共489页
软件架构设计_第2页
第2页 / 共489页
软件架构设计_第3页
第3页 / 共489页
软件架构设计_第4页
第4页 / 共489页
软件架构设计_第5页
第5页 / 共489页
点击查看更多>>
资源描述

《软件架构设计》由会员分享,可在线阅读,更多相关《软件架构设计(489页珍藏版)》请在金锄头文库上搜索。

1、1软件架构设计模式与实践康凯目录软件架构视图 软件生命周期与软件架构介绍 架构设计的GRASP模式 质量属性驱动架构设计策略 软件架构模式分析及其实际运用 架构设计原则 面向对象的设计原则 架构设计验证 数据访问层设计(持久层设计) 借鉴RUP中的设计流程 领域模型及业务逻辑层在架构设计中的实现 设计模式本质 SOA的设计思想 软件架构实践 软件系统架构实践与剖析前言软件系统开始坏死的症状一个软件系统开始坏死时表现的症状有: 硬化Rigidity系统变得越来越难以变更,修复或增添新功 能的代价高昂; 脆弱Fragility对系统的任何哪怕是微小的变更都可能造 成四处(甚至是与变更处没有逻辑上的

2、关联之处J崩溃; 绑死Immobility抽取系统的任何部分用来复用都非常困 难; 胶着Viscosity以与原有设计保持一致的方式来对实施变 更已经非常困难,诱使开发人员绕过它选择容易但有害的途 径,其结果却使系统死的更快。 什么是软件架构 软件架构的概念很混乱。如果你问五个不同的人,可能会得 到五种不同的答案。 软件架构概念主要分为两大流派: 组成派:软件架构 = 组件 + 交互。 决策派:软件架构 = 重要决策集。 组成派和决策派的概念相辅相成。 软件架构要层次化并隔离关注点 复杂性是层次化的。 -人月神话 好的架构设计必须把变化点错落有致地封装到软件系统的 不同部分(即关注点分离)。

3、通过关注点分离,达到“系统中的一部分发生了变化,不会 影响其他部分”的目标。 软件单元的粒度: 粒度最小的单元通常是“类”。 几个类紧密协作形成“模块”。 完成相对独立的功能的多个模块构成了“子系统”。 多个子系统相互配合才能满足一个完整应用的需求,从而 构成了软件“系统”。 一个大型企业往往使用多套系统,多套系统通过互操作形 成“集成系统”。 软件单元的粒度是相对的。同一个软件单元,在不同场景下 我们会以不同的粒度看待它。 架构(Architecture)与框架(Framework)。 框架只是一种特殊的软件,框架也有架构。 可以通过架构框架化达到“架构重用”的目的,如很多人都在 用 Spr

4、ing 框架提供的控制反转和依赖注入来构建自己的架 构。 软件架构的作用 如果一个项目的系统架构(包括理论基础)尚未确定,就不应 该进行此系统的全面开发。- Barry Boehm,Engineering Context 一个缺陷充斥的系统,将始终是一个缺陷充斥的系统。- Timothy C. Lethbridge,面向对象软件工程 软件架构设计为什么这么难? 因为它是跨越现实世界与计算机世界之间鸿沟的一座桥。 软件架构设计要完成从面向业务到面向技术的转换,在鸿沟 上架起一座桥梁。 需求 - 架构设计 - 软件架构 - 系统开发 - 软件系统软件架构对新产品开发的作用: 上承业务目标。 下接技

5、术决策。 控制复杂性。 先进行架构设计,后进行详细设计和编码实现,符合“基 于问题深度分而治之”的理念。 组织开发。 软件架构方案在小组中间扮演了“桥梁”和“合作契约”的作 用。 利于迭代开发和增量交付。 以架构为中心进行开发,为增量交付提供了良好的基础 。在架构经过验证之后,可以专注于功能的增量提交。 提高质量。 软件产品线:指具有一组可管理的、公共特性的、软件密集性 系统的集合,这些系统满足特定的市场需求或任务需求,并且 按照预定义方式从一个公共的核心资产集开发得到。 软件产品线架构:针对一个公司或组织内的一系列产品而设计 的通用架构。 软件架构对软件产品线开发的作用: 固化核心知识; 提

6、供可重用资产; 缩短推出产品的周期; 降低开发和维护成本; 提高产品质量; 支持批量定制; 架构师应当为项目相关的不同角色而设计: 架构师要为客户负责,满足他们的业务目标和约束条件。 架构师要为用户负责,满足他们关心的功能需求和运行期质 量属性。 架构师必须顾及处于协作分工“下游”的开发人员。 架构师必须考虑“周边”的管理人员,为他们进行分工管理、 协调控制和评估监控等工作提供清晰的基础。 软件架构视图让设计建模更明白、更有效张云贵 2010-05-21“系统架构图”?架构设计的多重视图 从根本上来说是因为需求种类的复杂性所致。 比如一个媒体发布系统: 功能需求:用户可以通过浏览器浏览媒体的发

7、布。据此 初步设计出采用浏览器插件的方案; 约束条件:不能影响用户浏览器的安全性;细化设计方 案,需要对插件进行认证,自动判别客户端是否存在, 及版本比较;自动下载注册等。 使用期质量属性:为保证浏览的流畅,应减少中间等待 的时间,因此应对下一步需使用的媒体做预测等。 制作发布期的质量保证:保证在遇到较大的媒体时能保 持浏览的流畅,应在发布时将视频等流式化。软件系统的需求种类复杂什么是软件架构视图 个架构视图是对于从某一视角或某一点上看到的系统所做的 简化描述,描述中涵盖了系统的某一特定方面,而省略了于 此方面无关的实体。 架构要涵盖的内容和决策太多了,超过了人脑“一蹴而就”的 能力范围,因此

8、采用“分而治之”的办法从不同视角分别设计 ;同时,也为软件架构的理解、交流和归档提供了方便。 多视图方法是软件架构归档的方法,更是指导我们进行架构 设计的思维方法。逻辑架构 逻辑架构关注功能。其设计着重考虑功能需求。 开发架构 开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩 展性、可重用性、可移植性、易理解性和易测试性等。 运行架构 运行架构关注进程、线程、对象等运行时概念,以及相关的并发 、同步、通信等问题。 其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可 用性和安全性等。 物理架构 物理架构关注软件系统最终如何安装或部署到物理机器。其设计 着重考虑“安装和部署需求”。以

9、及如何部署机器和网络来配合软件 系统的可靠性、可伸缩性等要求。 数据架构 数据架构关注持久化数据的存储方案。设计着重考虑“数据需求”。 关系逻辑视图。逻辑视图不仅关注用户可见的功能,还包括为实现用户功 能而必须提供的“辅助功能模块”;它们可能是逻辑层、功能模块等。开发视图。开发视图关注程序包,不仅包括要编写的源程序,还包括 可以直接使用的第三方SDK和现成框架、类库,以及开发的系统将运 行于其上的系统软件或中间件。开发视图和逻辑视图之间可能存在一 定的映射关系:比如逻辑层一般会映射到多个程序包等。运行视图。和开发视图的关系:开发视图一般偏重程序包在编译时期 的静态依赖关系,而这些程序运行起来之

10、后会表现为对象、线程、进 程,运行视图比较关注的正是这些运行时单元的交互问题。物理视图。和运行视图的关系:运行视图特别关注目标程序的动态执 行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合 考虑软件系统和整个IT系统相互影响的架构视图。 软件生命周期与软件架构介绍24软件架构师的定位系统架构师的职责: 一、理解系统的业务需求,制定系统的整体框架(包括:技术 框架和业务框架) 二、对系统框架相关技术和业务进行培训,指导开发人员开发 。并解决系统开发、运行中出现的各种问题。系统架构师的目的: 对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级 的把握。系统架构师能力要求: 一、系统

11、架构相关的知识和经验。 二、很强的自学能力、分析能力、解决问题的能力。 三、写作、沟通表达、培训。25角色 软件架构师Software Architect定义 主导系统全局分析设计和实施、负责软件构架和关键技术决策 的角色26职责 领导与协调整个项目中的技术活动(分析、设计和实施等) 推动主要的技术决策,并最终表达为软件构架 确定和文档化系统的相对构架而言意义重大的方面,包括系统的 需求、设计、实施和部署等“视图” 确定设计元素的分组以及这些主要分组之间的接口 为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风 险,并保证相关决定被有效的传达和贯彻 理解、评价并接收系统需求 评价和确认软

12、件架构的实现27专业技能 技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整 信息、众多问题交织一团、模糊和矛盾的情况下,迅速抓住问 题要害,并做出合理的关键决定的能力。 具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽 象级别上进行思考。 对项目开发涉及的所有问题领域都有经验,包括彻底地理解项 目需求,开展分析设计之类软件工程活动等。 具备领导素质,以在各小组之间推进技术工作,并在项目压力 下做出牢靠的关键决策。 拥有优秀的沟通能力,用以进行说服、鼓励和指导等活动,并 赢得项目成员的信任。28以目标导向和主动的方式来不带任何感情色彩地关注项目结果 ,构架师应当是项目背后的技术推动力

13、,而非构想者或梦想家 (追求完美) 精通构架设计的理论、实践和工具,并掌握多种参考构架、主 要的可重用构架机制和模式。 具备系统设计员的所有技能,但涉及面更广、抽象级别更高。29软件架构师的知识体系软件架构师作为整个软件系统结构的总设计师,其知识体系、 技能和经验决定了软件系统的可靠性、安全性、可维护性、可 扩展性和可移植性等方面的性能。因此一个优秀的软件架构师 必须具备相当丰富的知识、技能和经验。通过对比软件架构师和系统分析师在软件开发中的职责和角色 ,不难发现软件架构师与系统分析师所必需的知识体系也是不 尽相同的,系统分析师的主要职责是在需求分析、开发管理、 运行维护等方面,而软件架构师的

14、重点工作是在架构与设计这 两个关键环节上。因此在系统分析师必须具备的知识体系中对 系统的构架与设计等方面知识体系的要求就相对低些;而软件 架构师在需求分析、项目管理、运行维护等方面知识的要求也 就相对低些。30成为一名合格的软件架构师必须具备的知识 信息系统综合知识体系 软件架构知识体系31? MFC,MSF,MOF,RUP,J2EE,Spring,SOA,JUnit,ORM,.Net MVC,UML,XML,Corba,MDA,MDD,Web-Service RSS,Web2.0,AJAX,Serverlet,Hibernate IOC, AOP Ruby On Rails Rup BPEL

15、 Workflow Engine LBS Oracle CMMI MQ 32软件架构师在干什么?思考、思考、再思考 深入理解、准确把握建设的业务需求 分析所有可见的问题、障碍、风险 充分参考已有的成功方案,降低风险交流、讨论、博弈、质疑 对构思中的方案不断提出质疑,避免漏洞 广泛听取各层面的意见,开拓思路 反复质疑、逐步完善已有的设计构思在动手实现之前验证设计方案的正确性33软件架构师的知识结构软件知识 最好要有系统开发全过程经验。 对 IT 建设生命周期各个环节有深入了解,包括:系统/模块 逻辑设计、物理设计、代码开发、项目管理、测试、发布、 运行维护等。 深入掌握1-2种主流技术平台上开发系统的方法。 了解多种应用系统的结构。 了解架构设计领域的主要理论、流派、框架。34软件架构师的知识结构业务知识 深入了解系统建设的业务需求。 了解系统的非功能需求和运行维护需求。 了解企业 IT 公共设施、网络环境、外部系统。35软件架构师的思维方式基于框架的思维 架构设计的层次(Enterprise, Application, etc) IT 的生命周期(What, Why, Where, How, When, etc)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号