### 软件体系结构复习知识点
#### 一、框架模式
框架模式是软件工程中的一个重要组成部分,它指的是为了简化软件开发过程而预先定义的一种结构化的解决方案。在本复习资料中提到了几种常见的框架模式:
1. **MVC (Model-View-Controller)**:将应用程序分为三个核心部分:模型(数据)、视图(用户界面)和控制器(处理用户的输入)。这种模式有助于降低各个部分之间的耦合度,并使得代码更加易于维护。
2. **MTV (Model-Template-View)**:类似于MVC,但在Python Web框架Django中使用。其中,模板(Template)替代了MVC中的视图(View),主要负责用户界面的表现形式。
3. **MVP (Model-View-Presenter)**:增加了Presenter作为控制器和视图之间的桥梁,进一步减少了视图与模型之间的直接交互,提高了灵活性。
4. **CBD (Component Based Development)**:强调基于组件的开发,通过将系统划分为独立的、可重用的组件来构建系统。
5. **ORM (Object Relational Mapping)**:用于在对象和关系数据库之间进行映射,使开发者可以使用面向对象的方式来操作数据库。
#### 二、框架实例
框架是指为了实现特定功能而提供的基础架构,它可以极大地简化开发过程。以下是一些具体的编程语言及其常用的框架示例:
1. **C++**
- **QT**:适用于创建跨平台的应用程序。
- **MFC (Microsoft Foundation Classes)**:微软提供的一套用于Windows编程的类库。
- **GTK (GIMP Toolkit)**:主要用于Linux环境下的图形用户界面开发。
2. **Java**
- **SSH (Struts + Spring + Hibernate)**:一套流行的Java Web开发框架组合。
- **SSI (Struts + Spring + iBatis)**:与SSH相似,但使用iBatis作为持久层框架。
3. **PHP**
- **Smarty**:一个基于MVC模式的PHP模板引擎。
4. **Python**
- **Django**:一种基于MTV模式的高级Web框架。
#### 三、设计模式
设计模式是对特定问题的通用解决方案,它们提供了一种经过验证的方法来解决软件开发中的常见问题,有助于提高代码质量和可维护性。
1. **工厂模式**:提供了一种创建对象的接口,但允许子类决定实例化哪个类。这种模式将对象实例化的责任委托给子类。
2. **适配器模式**:允许不兼容的接口之间可以协作工作,通过适配器将一个类的接口转换成另一个类期望的接口。
3. **策略模式**:定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法独立于使用它的客户端。
#### 四、经典体系结构风格
不同的体系结构风格适用于不同类型的应用程序,每种风格都有其独特的优点和局限性。
1. **管道(Pipe)和过滤器(Filter)风格**
- **特征**:过滤器是独立的实体,每个过滤器都定义了输入输出集。
- **优点**:结构简单、易于维护和扩展、支持复用。
- **缺点**:可能导致批处理方式、不适合交互式应用、可能需要维护两个分离的相关流之间的对应关系。
2. **MVC框架**
- **特点**:简化系统设计、降低耦合度。
- **优点**:清晰的分层结构、易于维护和扩展。
- **缺点**:不是所有系统都适合分层、可能存在额外的性能开销。
3. **分层系统(Layered Systems)风格**
- **特点**:按照层次结构组织系统,层与层之间有明确的交互规则。
- **优点**:便于对复杂问题的分解、易于扩展和改进。
- **缺点**:不是所有系统都适合分层、可能存在额外的性能开销。
4. **基于事件(Event-Based)的风格**
- **特点**:构件之间的交互通过声明或广播事件来进行。
- **优点**:构件间关系较弱、较好的软件复用、系统升级简单。
- **缺点**:构件无法控制其他构件对其声明事件的响应、难以进行系统运行正确性的分析。
#### 五、构件化
构件化是软件工程中的一个重要概念,它强调软件的模块化和重用性,有助于提高软件的质量和开发效率。
1. **构件的定义**:是软件中可重用的部分,它通常包含了一定的功能性和逻辑性。
2. **构件的特点**:独立性、可重用性、语义性。
3. **软件构件化的目标**:通过制定标准和提供开发工具来促进组件的开发和部署。
4. **组件框架**:定义了组件的标准并提供了组件开发的支持。
5. **面向构件的发展趋势**:包括模型驱动开发(MDD)、构件服务化和业务化等方向。
以上是关于软件体系结构的一些重要知识点,通过对这些概念的理解和掌握,可以帮助开发者更好地进行软件设计和开发工作。