多视图的方法不只仅是架构归档技术,更是指导咱们进行架构设计的思惟方法。网络
越是复杂的系统,越是须要从多个方面进行架构设计,这样才能把问题研究和表达清楚,而提供不一样的软件架构视图也便于交流和传递设计思想。架构
关键需求是对软件架构设计起关键做用的需求子集,包括功能需求、质量需求和商业需求三种,架构细化必须注意知足这些需求。并发
领域模型是以面向对象方式对问题领域的模型的模拟和抽象,它揭示了重要的业务领域概念,并创建业务领域概念之间的关系,领域模型被不断精化后成为最终软件系统的问题领域层,它决定了软件系统的功能范围,并影响着软件系统的可扩展性。框架
概念性架构是对系统设计的最初构想,经过主要的设计元素及它们之间的关系来描述系统,这些高层次的设计选择对将来软件系统的质量和功能都有关键做用。性能
约束能够视为一类特殊的需求,它们具备强制性,规定了业务和技术上的标准和限制。线程
咱们利用架构视图的方法,从逻辑架构、开发架构、运行架构、物理架构和数据架构五个方面来进行架构设计。架构设计
设计逻辑架构:使用UML来描述,静态方面包括包图、类图、对象图;动态方面包括序列图、协做图、状态图和活动图。设计
逻辑架构的设计应该完成的工做:对象
细化功能单元接口
发现通用机制
细化领域模型
肯定子系统接口和交互机制
由于软件架构的重点在于‘软件系统的各部分是如何相关的’,那么咱们能够通过适度的抽象分析,将几组协做中的公共行为提取出来成为‘通用机制’,这样用利于全部涉众对软件架构的共同认识——即提升了系统的概念完整性。
什么是机制?所谓机制,是模式的实例,机制必须进一步细化才能成为特定模型中的协做,所以,机制是独特上下文中重复出现的问题的特定解决方案。能够说,机制符合模式的定义,任何协做均可以被称为机制,但一般,机制仅表示‘软件应用系统中重复出现的问题的解决方案’的协做,例如能够采用模式的持久化处理等等。
具备良好架构的系统具有概念完整性,它经过对系统架构创建一种清晰的认识来发现通用的抽闲机制,利用这种共性使得最终产生的系统结构更加简单,于是规模更小且更可靠。一个系统使用10000行代码实现远比1000000行代码好的多。
一流是每一个程序设计人员向往并为之奋斗却又没法具体说出的、难以达到的境界。一流的软件很是简明,它灵活而清晰,能经过创造性的机制解决复杂的问题,这些机制语义丰富,能够应用于其余可能彻底无关的问题。一流意味着寻求恰当的抽象,意味着经过新的途径合理利用有限的资源。
设计开发架构:着重考虑开发期间的质量属性,例如可扩展性、可重用性、可移植性等,开发架构的关注点是在软件开发环境中软件模块的实际组织方式,具体涉及源程序文件、配置文件、源程序包、编译后的目标文件、第三方库文件等。使用UML进行描述的话,涉及到包图、类图、组件图等。
开发架构的设计工做包括:
肯定要开发或直接利用的程序包之间的依赖关系
肯定采用的技术
肯定采用的框架
设计数据架构:着重考虑‘数据需求’,系统=程序+数据+硬件。数据架构的关注点是持久化数据的组织,对于不少集成系统,数据须要在不一样系统之间传递、复制、暂存等,这每每涉及到不一样的物理机器。数据架构的描述通常采用E-R图和数据流图来表示,采用UML时,涉及到类图和活动图。
数据架构的设计工做包括:
持久化数据存储方案
数据传递、数据复制、数据同步等策略
设计运行架构:着重考虑运行期间质量属性,例如性能、可伸缩性、持续可用性等。运行架构关注进程、线程、对象等运行时概念,以及相关的并发、同步、通讯等问题。采用UML图,静态方面涉及包图、类图、对象图;动态方面涉及序列图、协做图等。
开发架构通常偏重于程序包在编译时期的静态依赖关系,而这些程序运行起来以后会表现为对象、线程、进程,运行架构比较关注的是这些运行时单元的交互问题,运行架构是在开发架构的基础上,从宏观上规划多条控制流的并发和同步。
运行架构的设计工做包括:
肯定引入哪些进程和线程
肯定主动对象、被动对象、以及控制流关系
处理相关问题:进程线程的建立、销毁、通讯机制、资源争用等。
协议设计,例如基于TCP/IP协议定义本系统的‘应用协议’。
运用主动类规划并发
进行并发设计的缘由:1. 软件系统要支持的业务自己多是并发的。2. 处于对性能和伸缩性的考虑。3. 在某种状况下,并发性设计是最直观的。
实现并发的两种方法:进程和线程。在面向对象方法中,线程也应经过对象来封装,这包括两个概念:主动对象和主动类。主动对象是一组属性和服务的封装体,其中至少由一个服务是主动服务,主动服务不须要接收‘消息’就能主动执行。与主动对象相对的概念是被动对象,它的全部服务都是被动服务,须要被调用才能执行。主动类则是描述主动对象的类。
主动对象对于并发性设计之因此重要,是由于它是控制流的驱动者,主动对象的主动服务是控制流的源头,该主动服务被建立成进程或线程,从而它能够得到处理机资源并开始活动。从主动对象的主动服务开发,层层调用其余对象的服务,造成一个控制流。把系统中的全部主动对象表示清楚,就抓住了系统中每一个控制流的源头,就能够吧并发执行的全部控制流梳理清楚。
设计物理架构:着重考虑‘安装和部署需求’,物理视图描述了运行软件的计算机、网络、硬件设施等状况。还包括如何将软件包部署到这些硬件资源上,以及它们运行时的配置状况。相对于运行架构,物理架构重视目标程序的静态位置问题。若是采用UML,涉及到部署图和组件图。
物理架构的设计工做包括:
肯定物理配置方案
肯定如何将目标程序映射到物理节点
进行架构设计时,还须要注意要知足全部约束性的软件需求,忽视它们可能致使架构设计的失败。