您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 300页干货了解 高级系统架构设计
1高级系统架构设计康凯高级系统架构设计内部教程注意保密第一单元:软件架构视图软件系统开始坏死的症状•一个软件系统开始坏死时表现的症状有:–硬化Rigidity——系统变得越来越难以变更,修复或增添新功能的代价高昂;–脆弱Fragility——对系统的任何哪怕是微小的变更都可能造成四处(甚至是与变更处没有逻辑上的关联之处)崩溃;–绑死Immobility——抽取系统的任何部分用来复用都非常困难;–胶着Viscosity——以与原有设计保持一致的方式来对实施变更已经非常困难,诱使开发人员绕过它选择容易但有害的途径,其结果却使系统死的更快。好的设计表现•如果设计能实现如下目标,那么就是好的设计了。(SteveMcConne)•一:最少的复杂度–简单说就是要易于理解。•二:易于维护–为做维护工作的程序员、也为自己着想。(代码大多数时候做维护的还是自己)(函数名或代码能“望文知意”吗?)•三:松耦合–作为软件设计的军规之一。各部分的关联少意味着测试、集成、维护的时候可以更轻松。4•四:可扩展唯一不变的就是变化。如果作品不能适应变化的话,基本上就可以贴上不合格的标签了。记住开闭原则。总之:在给自己软件加功能的时候不要对底层甚至架构大动干戈就对了。•五:高扇入•六:低扇出超过约七个就算高扇出了.•七:可移植单纯;MVC;模块化;抽象…•八:高内聚5•九:精简性能少不多,不能觉得模式好,就有事没事都加上。程序员不能觉某个功能可能有用你就加上.因为这会增加测试等方面的任务,而且程序员认为用户会喜欢的用户未必会满意•十:层次性层次性,三/四层架构。好处:换了数据库而不必管上层。更好的分工。经验不足的人写的初级代码可以禁闭起来。以后可重构、换掉,也就减少了复杂度。•十一:使用标准技术熟悉度高。如使用相同的框架,代码风格应该使用相同的标准,多借用现有模式,不要自己发明通用框架,熟悉的东西容易理解。6•什么是软件架构–软件架构的概念很混乱。如果你问五个不同的人,可能会得到五种不同的答案。–软件架构概念主要分为两大流派:•组成派:软件架构=组件+交互。•决策派:软件架构=重要决策集。–组成派和决策派的概念相辅相成。•软件架构要层次化并隔离关注点•软件单元的粒度•架构(Architecture)与框架(Framework)•软件架构设计为什么这么难?–跨越现实世界与计算机世界之间鸿沟–软件架构设计要完成从面向业务到面向技术的转换。–需求-架构设计-软件架构-系统开发-软件系统•软件架构对新产品开发的作用:–上承业务目标。–下接技术决策。–控制复杂性。•先进行架构设计,后进行详细设计和编码实现,符合“基于问题深度分而治之”的理念。–组织开发。•软件架构方案在小组中间扮演了“桥梁”和“合作契约”的作用。–利于迭代开发和增量交付。•以架构为中心进行开发,为增量交付提供了良好的基础。在架构经过验证之后,可以专注于功能的增量提交。–提高质量。•软件产品线:指具有一组可管理的、公共特性的、软件密集性系统的集合,这些系统满足特定的市场需求或任务需求,并且按照预定义方式从一个公共的核心资产集开发得到。•软件产品线架构:针对一个公司或组织内的一系列产品而设计的通用架构。•软件架构对软件产品线开发的作用:–固化核心知识;–提供可重用资产;–缩短推出产品的周期;–降低开发和维护成本;–提高产品质量;–支持批量定制;•架构师应当为项目相关的不同角色而设计:–架构师要为客户负责,满足他们的业务目标和约束条件。–架构师要为用户负责,满足他们关心的功能需求和运行期质量属性。–架构师必须顾及处于协作分工“下游”的开发人员。–架构师必须考虑“周边”的管理人员,为他们进行分工管理、协调控制和评估监控等工作提供清晰的基础。•架构设计的多重视图–从根本上来说是因为需求种类的复杂性所致。–比如一个媒体发布系统:•功能需求:用户可以通过浏览器浏览媒体的发布。据此初步设计出采用浏览器插件的方案;•约束条件:不能影响用户浏览器的安全性;细化设计方案,需要对插件进行认证,自动判别客户端是否存在,及版本比较;自动下载注册等。•使用期质量属性:为保证浏览的流畅,应减少中间等待的时间,因此应对下一步需使用的媒体做预测等。•制作发布期的质量保证:保证在遇到较大的媒体时能保持浏览的流畅,应在发布时将视频等流式化。•逻辑架构–逻辑架构关注功能。•开发架构–开发架构关注程序包。其设计着重考虑开发期质量属性,如可扩展性、可重用性、可移植性、易理解性和易测试性等。•运行架构–运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通信等问题。–其设计着重考虑运行期质量属性,例如性能、可伸缩性、持续可用性和安全性等。•物理架构–物理架构关注软件系统最终如何安装或部署到物理机器。其设计着重考虑“安装和部署需求”。以及如何部署机器和网络来配合软件系统的可靠性、可伸缩性等要求。•数据架构–数据架构关注持久化数据的存储方案。设计着重考虑“数据需求”。关系•逻辑视图。逻辑视图不仅关注用户可见的功能,还包括为实现用户功能而必须提供的“辅助功能模块”;它们可能是逻辑层、功能模块等。•开发视图。开发视图关注程序包,不仅包括要编写的源程序,还包括可以直接使用的第三方SDK和现成框架、类库,以及开发的系统将运行于其上的系统软件或中间件。开发视图和逻辑视图之间可能存在一定的映射关系:比如逻辑层一般会映射到多个程序包等。•运行视图。和开发视图的关系:开发视图一般偏重程序包在编译时期的静态依赖关系,而这些程序运行起来之后会表现为对象、线程、进程,运行视图比较关注的正是这些运行时单元的交互问题。•物理视图。和运行视图的关系:运行视图特别关注目标程序的动态执行情况,而物理视图重视目标程序的静态位置问题;物理视图是综合考虑软件系统和整个IT系统相互影响的架构视图。•软件生命周期与软件架构介绍20软件架构师的定位•系统架构师的职责:•一、理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架)•二、对系统框架相关技术和业务进行培训,指导开发人员开发。并解决系统开发、运行中出现的各种问题。•系统架构师的目的:•对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握。•系统架构师能力要求:•一、系统架构相关的知识和经验。•二、很强的自学能力、分析能力、解决问题的能力。•三、写作、沟通表达、培训。21•职责–领导与协调整个项目中的技术活动(分析、设计和实施等)–推动主要的技术决策,并最终表达为软件构架–确定和文档化系统的相对构架而言意义重大的方面,包括系统的需求、设计、实施和部署等“视图”–确定设计元素的分组以及这些主要分组之间的接口–为技术决策提供规则,平衡各类涉众的不同关注点,化解技术风险,并保证相关决定被有效的传达和贯彻–理解、评价并接收系统需求–评价和确认软件架构的实现22•专业技能•技术全面、成熟练达、洞察力强、经验丰富,具备在缺乏完整信息、众多问题交织一团、模糊和矛盾的情况下,迅速抓住问题要害,并做出合理的关键决定的能力。•具备战略性和前瞻性思维能力,善于把握全局,能够在更高抽象级别上进行思考。•对项目开发涉及的所有问题领域都有经验,包括彻底地理解项目需求,开展分析设计之类软件工程活动等。•具备领导素质,以在各小组之间推进技术工作,并在项目压力下做出牢靠的关键决策。•拥有优秀的沟通能力,用以进行说服、鼓励和指导等活动,并赢得项目成员的信任。23•以目标导向和主动的方式来不带任何感情色彩地关注项目结果,构架师应当是项目背后的技术推动力,而非构想者或梦想家(追求完美)•精通构架设计的理论、实践和工具,并掌握多种参考构架、主要的可重用构架机制和模式。•具备系统设计员的所有技能,但涉及面更广、抽象级别更高。24软件架构师的知识体系•软件架构师作为整个软件系统结构的总设计师,其知识体系、技能和经验决定了软件系统的可靠性、安全性、可维护性、可扩展性和可移植性等方面的性能。因此一个优秀的软件架构师必须具备相当丰富的知识、技能和经验。•通过对比软件架构师和系统分析师在软件开发中的职责和角色,不难发现软件架构师与系统分析师所必需的知识体系也是不尽相同的,系统分析师的主要职责是在需求分析、开发管理、运行维护等方面,而软件架构师的重点工作是在架构与设计这两个关键环节上。因此在系统分析师必须具备的知识体系中对系统的构架与设计等方面知识体系的要求就相对低些;而软件架构师在需求分析、项目管理、运行维护等方面知识的要求也就相对低些。25•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•RubyOnRails•Rup•BPEL•WorkflowEngine•LBS•Oracle•CMMI•MQ•…26软件架构师在干什么?•思考、思考、再思考–深入理解、准确把握建设的业务需求–分析所有可见的问题、障碍、风险–充分参考已有的成功方案,降低风险•交流、讨论、博弈、质疑–对构思中的方案不断提出质疑,避免漏洞–广泛听取各层面的意见,开拓思路–反复质疑、逐步完善已有的设计构思•在动手实现之前验证设计方案的正确性27软件架构师的知识结构•软件知识–最好要有系统开发全过程经验。–对IT建设生命周期各个环节有深入了解,包括:系统/模块逻辑设计、物理设计、代码开发、项目管理、测试、发布、运行维护等。–深入掌握1-2种主流技术平台上开发系统的方法。–了解多种应用系统的结构。–了解架构设计领域的主要理论、流派、框架。28软件架构师的知识结构•业务知识–深入了解系统建设的业务需求。–了解系统的非功能需求和运行维护需求。–了解企业IT公共设施、网络环境、外部系统。29软件架构师的思维方式•基于框架的思维–架构设计的层次(Enterprise,Application,etc)–IT的生命周期(What,Why,Where,How,When,etc)–成功经验以及方法论的指导•合理把握技术细节–把握各个层次应有的内容–合理忽略不应有的技术细节30软件架构师的思维方式•风险管理意识–采用成功经验、避免不应有的风险•多方位的开放思维–多维度、多方向、包容性、避免排他性–分析、质疑、抽象、归纳–没有绝对好的架构设计,只有相对优秀的方案•注意:并不存在通用的设计方法。我们认为,给定的某种固定的方法总是会顾此失彼,而且这种不平衡性不太容易觉察。如果给定的某种方法所注重的方面与系统需求不吻合,则这种方法就会将设计引入歧途。所以我们给出的是一些技巧,任何一次设计过程,都需要设计师仔细分析系统的需求和相关的约束条件,灵活运用众多的设计技巧,针对不同的设计方案进行取舍,做出合理的决策。31•软件架构必须设计到“能为开发人员提供足够的指导和限制”的程度。•分而治之的两种方式3233第二单元:架构设计的GRASP原则34353637383940414243444546474849505152第三单元:架构设计过程•重型和轻型方法–重型方法:偏重于计划、过程和中间产物–敏捷方法:更加看重人和沟通。人和沟通永远是第一位的,而计划、过程和中间产物,只是保证沟通、实现目标的手段。并非计划、过程、中间产物不重要,但不能本末倒置。•评判软件成功的标准:•如何开始架构设计工作–考虑的平台、语言、开发环境、数据库等–误区:架构设计就是写一些空话,套话。–误区:对与客户具体情况密切相关的问题却未系统考虑。–IT界的技术层出不穷,面对着如此之多的技术、平台、框架、函数库,我们如何选择一组适合软件的技术?•要针对需求设计架构。–每个客户都有自身特点,如何才能够设计出符合客户利益的架构?–软件中往往都充斥着众多的问题,在一开始就把所有的问题都想清楚往往很难做到,但是如果不解决问题,风险又居高不下。内容一:商业架构设计•软件功能需求对架构的影响•软件质量需求对架构的影响•软件商业质量属性分析•软件约束条件与
本文标题:300页干货了解 高级系统架构设计
链接地址:https://www.777doc.com/doc-4219400 .html