面向交互的架构
面向交互的架构的首要目标是将用户的交互与数据抽象和业务数据处理分开。面向交互的软件架构将系统分解为三个主要部分 -
数据模块- 数据模块提供数据抽象和所有业务逻辑。
控制模块- 控制模块识别控制流程和系统配置操作。
视图呈现模块- 视图呈现模块负责数据输出的视觉或音频呈现,它还提供用户输入的界面。
面向交互的架构有两种主要风格:模型-视图-控制器(MVC)和表示-抽象-控制(PAC)。MVC 和 PAC 都提出了三组件分解,并用于交互式应用程序,例如具有多个对话和用户交互的 Web 应用程序。它们的控制流程和组织不同。PAC是基于代理的分层架构,但MVC没有清晰的分层结构。
模型-视图-控制器 (MVC)
MVC 将给定的软件应用程序分解为三个互连的部分,这有助于将信息的内部表示与向用户呈现或从用户接受的信息分开。
模块 | 功能 |
---|---|
模型 | 封装底层数据和业务逻辑 |
控制器 | 响应用户操作并指导应用程序流程 |
看法 | 格式化数据并将模型中的数据呈现给用户。 |
模型
模型是 MVC 的核心组件,直接管理应用程序的数据、逻辑和约束。它由数据组件组成,维护接口的原始应用程序数据和应用程序逻辑。
它是一个独立的用户界面,捕获应用程序问题域的Behave。
它是应用程序中心结构的特定领域软件模拟或实现。
当其状态发生变化时,它会通知其关联视图以生成更新的输出,并通知控制器以更改可用的命令集。
看法
视图可用于以图形形式(例如图表或图表)表示任何信息输出。它由提供数据可视化表示的表示组件组成
视图从其模型请求信息并向用户生成输出表示。
同一信息可以有多种视图,例如用于管理的条形图和用于会计师的表格视图。
控制器
控制器接受输入并将其转换为模型或视图的命令。它由输入处理组件组成,这些组件通过修改模型来处理来自用户的输入。
它充当关联模型和视图与输入设备之间的接口。
它可以向模型发送命令以更新模型的状态,并向其关联的视图发送命令以更改模型的视图呈现。
MVC-I
它是 MVC 架构的简单版本,其中系统分为两个子系统 -
控制器视图- 控制器视图充当输入/输出接口并完成处理。
模型- 该模型提供所有数据和域服务。
MVC-I架构
模型模块将任何数据更改通知控制器视图模块,以便任何图形数据显示将相应更改。控制器还根据变化采取适当的措施。
控制器视图和模型之间的连接可以设计为订阅通知模式(如上图所示),控制器视图订阅模型,模型通知控制器视图任何更改。
MVC-II
MVC-II 是 MVC-I 架构的增强,其中视图模块和控制器模块是分开的。模型模块通过提供数据库支持的所有核心功能和数据,在 MVC-I 中发挥着积极的作用。
视图模块呈现数据,而控制器模块接受输入请求,验证输入数据,启动模型、视图、它们的连接,并分派任务。
MVC-II架构
MVC应用程序
MVC 应用程序对于交互式应用程序非常有效,在交互式应用程序中,单个数据模型需要多个视图,并且可以轻松插入新的或更改的界面视图。
MVC应用程序适用于模块之间有明确划分的应用程序,以便可以分配不同的专业人员同时处理此类应用程序的不同方面。
优点
有许多 MVC 供应商框架工具包可用。
多个视图与同一数据模型同步。
易于插入新的或替换的界面视图。
用于图形专业人士、编程专业人士和数据库开发专业人士在设计的项目团队中工作的应用程序开发。
缺点
不适合面向代理的应用程序,例如交互式移动和机器人应用程序。
基于同一数据模型的多对控制器和视图使得任何数据模型更改的成本都很高。
在某些情况下,View 和 Controller 之间的划分并不明确。
表示-抽象-控制 (PAC)
在 PAC 中,系统被安排成由许多合作代理(三元组)组成的层次结构。它是从MVC发展而来,除了交互需求之外,还支持多代理的应用需求。
每个代理都有三个组成部分 -
演示组件- 格式化数据的视觉和音频演示。
抽象组件- 检索和处理数据。
控制组件- 处理其他两个组件之间的控制流和通信等任务。
PAC 架构与 MVC 类似,表示模块类似于 MVC 的视图模块。抽象模块类似于MVC的模型模块,控制模块类似于MVC的控制器模块,但它们的控制流程和组织方式有所不同。
每个代理中的抽象组件和表示组件之间没有直接连接。每个代理中的控制组件负责与其他代理的通信。
下图显示了 PAC 设计中单个代理的框图。
具有多个代理的 PAC
在由多个Agent组成的PAC中,顶层Agent提供核心数据和业务逻辑。底层代理定义详细的具体数据和表示。中级或中级代理充当低级代理的协调员。
每个代理都有自己特定的分配工作。
对于某些中级代理来说,不需要交互式演示,因此它们没有演示组件。
所有代理都需要控制组件,所有代理通过控制组件相互通信。
下图显示了参与 PAC 的多个代理。
应用领域
对于交互式系统非常有效,其中系统可以以分层方式分解为许多合作代理。
当代理之间的耦合预计是松散的,以便代理上的更改不会影响其他代理时,该方法非常有效。
对于分布式系统有效,其中所有代理都远程分布,并且每个代理都有自己的数据和交互界面功能。
适合具有丰富 GUI 组件的应用程序,其中每个组件都保留自己的当前数据和交互界面,并且需要与其他组件通信。
优点
支持多任务和多查看
支持代理的可重用性和可扩展性
轻松插入新代理或更改现有代理
支持多个代理在不同线程或不同设备或计算机中并行运行的并发性
缺点
由于表示和抽象之间的控制桥梁以及代理之间的控件通信而产生的开销。
由于代理之间的松散耦合和高度独立性,很难确定正确的代理数量。
每个代理中的控制将表示和抽象完全分离会产生开发复杂性,因为代理之间的通信仅发生在代理的控件之间