目录
2.The Layered Pattern 例子:TCP/IP体系结构
4.Model-View-Controller Pattern 例子:excel表格
5.Pipe-and-Filter Pattern管道和过滤器模式 例子:爱奇艺
0.前言
本系列文章旨在软件设计与体系结构的知识点,资料来源四川大学授课内容,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗部分为重点。
![](https://i-blog.csdnimg.cn/blog_migrate/04b1ce3383cd69bab11b6fcbd466f426.png)
1.Introduction
架构模式architectural pattern定义:是在实践中反复出现的一些设计决策;具有允许重复使用的已知属性;描述了一类架构
一个架构模式包括:Name/A context/A problem/A solution
Solution包括elements, relations, topological layout, constraints
模式的三个分类:
- Module patterns ( Layered Pattern )模块模式(分层模式)
- Component-and-Connector patterns ( Broker, Publish-Subscribe )组件和连接器模式(代理、发布-订阅)
- Allocation patterns ( Map-Reduce, Multi-tier)分配模式(Map-Reduce、多层模式)
2.The Layered Pattern 例子:TCP/IP体系结构
1)Context:所有复杂系统都需要独立开发和演进系统的各个部分
系统需要有明确的、记录完备的关注点分离
2)Problem:软件需要细分,以便各模块可以单独开发和演进,各部分之间很少互动
3)Solution:分层模式将软件划分为层;每一层都是模块的组合,提供一套内聚的服务
Element: layer, a kind of module,模块包含层所提供服务的内聚性特征
Relations: Allowed to use,这是一种更通用的依赖关系的特殊化。例如,高层单向使用低层服务
Constraints: 每个软件都被分配到一个层上;至少有两层;allowed-to-use relations不应是循环的
4)The Layered pattern supports:portability;Modifiability;Reuse
5)Solution的缺点:增加层数会增加系统的前期成本和复杂性;层数会降低性能
2.6 Layer bridging
这种上层软件使用非相邻下层模块的情况称为层桥layer bridging
如果发生多次层桥接,系统可能无法实现其可移植性和可修改性目标,而严格的分层有助于实现这些目标
2.7 Some Finer Points of Layers分层的一些细节
分层模式是所有软件工程中最常用的模式之一
通过添加图表符号判断是否允许层桥
层被划分为若干段,表示对模块进行更细粒度的分解
3.Broker Pattern 例子:携程网
代理模式属于组件和连接器模式
代理模式定义了一个运行时组件,称为 "代理"(broker),它在多个客户端和服务器之间进行中介通信
1)Context:许多系统都是由分布在多个服务器上的服务集合构建而成的,实施这些系统非常复杂,因为你需要担心:系统如何互通操作;系统如何相互连接;如何交换信息;服务的可用性
2)Problem:如何构建分布式软件,使服务用户无需了解服务提供商的性质和位置?
如何轻松地动态更改用户与提供商之间的绑定关系?
3)Solution:代理模式通过插入一个中间人(称为代理),将客户与服务器分离开来;当客户机需要服务时,它通过服务接口查询代理;客户完全不知道服务器的身份、位置和特征
Element:
①Client, a requester of services
②Server, a provider of services
③Broker, an intermediary
④Client-side proxy客户端代理
⑤Server-side proxy服务器端代理
Relation:附加关系attachment relation将客户和服务器与代理联系起来
Constraints: 客户端只能连接到代理;服务器只能连接到代理
4)Solution的缺点:代理会增加前期复杂性;代理可能是单点故障(可用性);代理可能成为安全攻击的目标;代理可能难以测试;代理会导致延迟,代理可能成为通信瓶颈
5)优点:可修改性优势、使用中介策略;可用性优势,因为代理模式易于替换故障服务器;性能优势,因为代理模式便于将工作分配给最不繁忙的服务器
6)代理模式的应用:通用对象请求代理架构(CORBA);Java Beans(EJB);微软的 .NET 平台;面向服务架构(SOA)
4.Model-View-Controller Pattern 例子:excel表格
模型-视图-控制器模式属于组件和连接器模式;MVC 模式将系统功能分成三个部分:模型、视图和在模型与视图之间起中介作用的控制器
1)Context:用户界面软件通常是交互式应用程序中最常修改的部分;将用户界面软件的修改与系统其他部分分开;用户希望从条形图或饼图等不同角度查看数据
2)Problem:如何将用户界面功能与应用程序功能分开,但仍能对用户输入或底层应用程序数据的变化做出响应?当数据发生变化时,如何创建、维护和协调用户界面的多个视图?
3)Solution:MVC 模式将应用程序功能分为三种组件:模型,包含数据;视图,显示部分数据并与用户交互;控制器,在模型和视图之间进行调解,并管理状态变化通知
Element:模型是应用程序数据或状态的表示;视图是用户界面,可以生成模型的表示或允许某种形式的用户输入;控制器管理模型和视图之间的交互,将用户操作转化为变化
Relations: notifies relation连接模型、视图和控制器的实例,通知元素相关的状态变化
Constraints: 模型、视图和控制器必须至少各有一个实例
4)缺点:对于简单的用户界面来说,复杂性可能不值得一试;模型、视图和控制器抽象可能不适合某些用户界面工具包,某些商业用户界面工具包会将输入和输出合并为单独的小部件
5)优点:由于这些组件是松散耦合的,因此很容易并行开发和测试它们,对其中一个组件的更改对其他组件的影响很小
MVC模式的应用:Java 的 Swing 类;微软的 ASP.NET 框架;Adobe 的 Flex 软件开发工具包;诺基亚的 QT 框架;一个应用程序通常包含多个 MVC 实例
5.Pipe-and-Filter Pattern管道和过滤器模式 例子:爱奇艺
管道加过滤器模式属于组件和连接器模式;管道和过滤器模式通过由管道连接的过滤器进行一系列转换,将数据从系统的外部输入转换到外部输出。
1)Context:许多系统需要将数据流从输入转换为输出;许多类型的转换在实践中会反复出现,因此最好将这些转换创建为独立的、可重复使用的部分
2)Problem:此类系统需要划分为可重复使用、松散耦合的组件,并具有简单、通用的交互机制;组件之间可以灵活组合;组件易于重复使用;独立的组件可以并行执行
3)Solution:管道过滤器模式的特点是对数据流进行连续转换;数据到达过滤器的输入端口,经过转换,然后通过管道从输出端口传送到下一个过滤器
Element:Filter过滤器是一个将从其输入端口读取的数据转换为从其输出端口写入的数据的组件;可同时执行;可递增转换数据。Pipe管道是一种连接器,用于将数据从一个过滤器的输出端口传输到另一个过滤器的输入端口;只有一个源和一个目标;管道保留数据
Relation:附件关系attachment relation将过滤器的输出与管道的输入联系起来
Constraints:管道连接过滤器输出端口和过滤器输入端口;连接的过滤器必须就沿管道传递的数据类型达成一致意见某些特殊化可能会规定组件具有特定的命名端口,例如 UNIX 过滤器的 stdin、stdout 和 stderr 端口
4)缺点:管道过滤器模式通常不是交互式系统的理想选择;拥有大量独立的过滤器会增加计算开销;管道加过滤器系统可能不适合长期运行的计算;因为任何一个过滤器(或管道)的故障都可能导致整个管道故障
5)应用:数据转换系统,如视频流;信号处理应用;UNIX 管道: Apache 网络服务器、map-reduce 模式