12.8数据库选择策略
数据库就是对数据的惯例
对数据的增删改查
数据库管理中包括用户访问权限,持久化,分布式等不同的方案选择。
eg
常用数据库介绍
非关系型数据库**
选择策略
案例分析
12.1软件体系结构概念
问题:当系统的规模和复杂度不断增大的时候,构造整个系统的关键是什么?
从系统宏观上来看
软件体系结构( Software Architecture )包括构成系统的设计元素的描述、设计元素之间的交互、设计元素的组合模式以及在这些模式中的约束。
软件体系结构=构件+连接件+约束
- 如何将复杂的软件系统划分成模块
- 如何规范模块的构成
- 如何将这些模块组织成为完整的系统
- 如何保证系统的质量要求
构件是具有某种功能的可复用的软件结构单元,表示系统中主要的计算元素和数据存储。
连接是构件间建立和维护行为关联与信息传递的途径。
连接件表示构件之间的交互并实现构件之间的连接。
(特殊的构件)
软件体系结构的发展:
风格、模式和框架
- 体系结构风格:用于描述某- -特定应用领域中系统组织的惯用模式,反映了领域中众多系统所共有的结构和语义特性。
- 设计模式:描述了软件系统设计过程中常见问题的一些解决方案,通常是从大量的成功实践中总结出来的且被广泛公认的实践和知识。
- 软件框架:软件框架是由开发人员定制的应用系统的骨架,是整个或部分系统的可重用设计,由一-组抽象构件和构件实例间的交互方式组成。
框架和体系的关系:
- 体系结构的呈现形式是一个设计规约,而框架则是"半成品”的软件;
- 体系结构的目的是指导软件系统的开发,而框架的目的是设计复用。
12.2软件设计原则
设计原则是系统分解和模块设计的基本标准,应用这些原则可以使代码更加灵活、易于维护和扩展。
抽象是关注事物中与问题相关部分而忽略其他无关部分的一种思考方法。
封装和信息隐藏是指每个软件单元对其他所有单元都隐藏自己的设计决策,各个单元的特性通过其外部可见的接口来描述。
模块化是在逻辑和物理.上将整个系统分解成多个更小的部分,其实质是“分而治之"即将-个复杂问题分解成若干个简单问题, 然后逐个解决。
系统分解的目标:高内聚、低耦合
内聚性是一 个模块或子系统内部的依赖程度。
- 如果一个模块或子系统含有许多彼此相关的元素,并且它们执行类似任务,那么其内聚性比较高;如果一个模块或子系统含有许多彼此不相关的元素,其内聚性就比较低。
耦合性是两个模块或子系统之间依赖关系的强度。
- 如果两个模块或子系统是松散耦合的,二者相互独立,那么当其中一个发生变化时对另一个产生的影响就很小;如果两个模块或子系统是紧密耦合的,其中一个发生变化就可能对另一 个产生较大影响。
复用( Reuse )是利用某些已开发的、对建立新系统有用的软件元素来生成新的软件系统,其好处在于提高生产效率,提高软件质量。
- 源代码复用:对构件库中的源代码构件进行复用
- 软件体系结构复用:对已有的软件体系结构进行复用
- 框架复用:对特定领域中存在的一-个公共体系结构及其构件进行复用
- 设计模式:通过为对象协作提供思想和范例来强调方法的复用
12.3软件体系结构风格(一)
软件体系结构风格( Architectural Styles )是描述特定系统组织方式的惯用范例,强调了软件系统中通用的组织结构。
独立构件风格、数据流风格等
主程序——子程序
主程序-子程序风格是结构化程序设计的一种典型风格,从功能的观点设计系统,通过逐步分解和细化,形成整个系统的体系结构。
如C语言
面向对象风格
- 系统被看作是对象的集合,每个对象都有一个它自己的功能集合;
- 数据及作用在数据上的操作被封装成抽象数据类型;
- 只通过接口与外界交互,内部的设计决策则被封装起来。
如:C++,Java
管道-过滤器风格
管道过滤器风格把系统任务分成若干连续的处理步骤,这些步骤由通过系统的数据流连接,一个步骤的输出是下一个步骤的输入。
不适合交互应用
以数据为中心的风格
仓库体系结构( Repository Architecture )是一-种以数据为中心的体系结构,适合于数据由一个模块产生而由其他模块使用的情形。
缺点:模块与仓库耦合很高
12.3软件体系结构风格(二)
客户机/服务器体系结构
客户机/服务器体系结构( Client/Server )是一 种分布式系统模型,作为服务器的子系统为其他客户机的子系统提供服务,作为客户机的子系统负责与用户的交互。
减小客户端负担
受限与通讯 注意保证
MVC
模型-视图控制器( MVC )结构将应用程序的数据模型、业务逻辑和用户界面分别放在独立构件中,这样对用户界面的修改不会对数据模型/业务逻辑造成太大影响。
12.7Web系统架构设计