架构分析:
架构分析工作主要从宏观上考虑一个软件系统应该如何组织。通常,在架构分析工作中,我们需要确定一些策略性的设计方针,原则和基本模式。在它们的指导下,我们可以高屋建瓴地分析软件系统的宏观结构,认识软件系统由哪些组件构成,了解组件之间的接口和协作关系。架构分析的结果对于后续的面向对象设计工作也是一种约束,有助于消除设计和实现过程中的随意性。因此,架构分析有时也被称为策略设计
组件指的是一组对象构成的,有固定接口的有机体,当设计者的观察视角不同,组件的规模不同或者组件内部的封装度程度不同时,这些有机体可能表现为不同的形式,如软件架构中的层,包或者子系统,架构分析的目的是通过科学的解析,将整个软件系统划分为不同的组件,并且准确定义出组件和组件之间的接口
在软件的实现层面,不同类型的组件,如层,包或者子系统等,也可能有不同的表现形式。例如,它们可以表现为java程序中的一个包,也可以是c++项目中的一个源代码目录。在软件发布和配置时,一个或者对个组件可以连接成一个可执行程序,可以表现为一个动态链接库,也可以表现为ActiveX空间或EJB组件
架构分析的作用:
架构分析工作预先为软件定义了科学的结构和规则,通过这些结构和规则,人们能有效地控制软件的复杂性,是软件易于理解实现和管理
好的的软件架构既可以分析软件中的不同组件,又可以精确定义组件之间的接口,这可以是软件系统中大部分组件具备较好的可复用性,同时通过架构分析工作,也可以实现更大范围的软件复用,即直接服用那些有代表性的软件架构
架构分析的结果也是多个项目组进行协作的基础。在软件架构有效分离的组件可以被分配给不同的项目组开发,只要保证组件的接口定义不变,组件内部的变化不会对整个系统的继承产生影响
避免走入功能分解的误区:
功能分解和面向对象是格格不入的两种思维方式,功能呢个分解会严重妨害对系统组件及组件关系的理解。面向对象分析和设计的基本原则强调对数据和相关操作的封装,根据这一要求,耦合度强,在逻辑上关系密切的数据以及操作这些数据的方法应该被封装在同一个类中。如果在面向对象分析之前,就采用功能分解的方法将软件系统肢解为多个功能模块,那么操作同一个数据的方法可能被分拆到不同的模块中,不同模块里的对象也会产生很强的耦合性
子系统设计应该属于面向对象设计工作的一部分,应该在面向对象分析之后进行。在子系统设计过程中,设计者应该基于面向对象分析的结果来划分子系统,尽可能避免按功能划分的做法
架构分析的准备工作
在架构之前应该明白软件的类型是交互类型的软件还是系统类型的软件。架构分析在软件的整个生命周期里是一个迭代的过程,在面向对象分析和面向对象设计等不同的阶段中,软件系统的架构被一步步细化和完善
架构模式:
架构模式就是那些在开发过程中通过积累获得的,经实践检验行之有效.可复用的软件架构