面向交互的架构

面向交互的架构的主要目标是将用户交互与数据抽象和业务数据处理分离开来。面向交互的软件架构将系统分解为三个主要部分 −

  • 数据模块 − 数据模块提供数据抽象和所有业务逻辑。

  • 控制模块 − 控制模块识别控制流和系统配置操作。

  • 视图呈现模块 − 视图呈现模块负责数据输出的视觉或音频呈现,它还提供用户输入的界面。

面向交互的架构有两种主要风格 − 模型-视图-控制器 (MVC) 和 呈现-抽象-控制 (PAC)。 MVC 和 PAC 都提出了三个组件分解,并用于交互式应用程序,例如具有多个对话和用户交互的 Web 应用程序。它们的控制流和组织方式不同。PAC 是一种基于代理的分层架构,但 MVC 没有清晰的分层结构。

模型-视图-控制器 (MVC)

MVC 将给定的软件应用程序分解为三个相互关联的部分,有助于将信息的内部表示与呈现给用户或从用户那里接受的信息分开。

模块 函数
模型 封装底层数据和业务逻辑
控制器 响应用户操作并指导应用程序流程
视图 格式化并将数据从模型呈现给用户。

模型

模型是 MVC 的核心组件,直接管理应用程序的数据、逻辑和约束。它由数据组件组成,用于维护界面的原始应用程序数据和应用程序逻辑。

  • 它是一个独立的用户界面,可捕获应用程序问题域的行为。

  • 它是特定于领域的软件模拟或应用程序中心结构的实现。

  • 当其状态发生变化时,它会通知其关联视图以生成更新的输出,并通知控制器更改可用的命令集。

视图

视图可用于以图形形式(如图表)表示任何信息输出。它由提供数据可视化表示的演示组件组成

  • 视图从其模型请求信息并向用户生成输出表示。

  • 同一信息可能有多个视图,例如管理的条形图和会计的表格视图。

控制器

控制器接受输入并将其转换为模型或视图的命令。它由输入处理组件组成,这些组件通过修改模型来处理来自用户的输入。

  • 它充当相关模型和视图与输入设备之间的接口。

  • 它可以向模型发送命令以更新模型的状态,并向其相关视图发送命令以更改视图对模型的呈现。

MVC 组件

MVC - I

它是 MVC 架构的一个简单版本,其中系统分为两个子系统 −

  • 控制器视图 − 控制器视图充当输入/输出接口并完成处理。

  • 模型 −该模型提供所有数据和领域服务。

MVC-I 架构

模型模块会将任何数据更改通知控制器视图模块,以便任何图形数据显示都会相应更改。控制器还会根据更改采取适当的操作。

MVC-I 架构

控制器视图和模型之间的连接可以设计为订阅-通知模式(如上图所示),其中控制器视图订阅模型,模型将任何更改通知控制器视图。

MVC - II

MVC-II 是 MVC-I 架构的增强版,其中视图模块和控制器模块是分开的。模型模块通过提供数据库支持的所有核心功能和数据,在 MVC-I 中发挥着积极作用。

视图模块呈现数据,而控制器模块接受输入请求、验证输入数据、启动模型、视图及其连接,并分派任务。

MVC-II 架构

MVC-II 架构

MVC 应用程序

MVC 应用程序适用于交互式应用程序,其中单个数据模型需要多个视图,并且易于插入新的或更改的界面视图。

MVC 应用程序适用于模块之间有明确划分的应用程序,以便可以指派不同的专业人员同时处理此类应用程序的不同方面。

优点

  • 有许多 MVC 供应商框架工具包可用。

  • 多个视图与同一数据模型同步。

  • 易于插入新的或替换界面视图。

  • 用于图形专业专家、编程专家和数据库开发专家在设计的项目团队中工作的应用程序开发。

缺点

  • 不适用于面向代理的应用程序,例如交互式移动和机器人应用程序。

  • 基于相同数据模型的多对控制器和视图使任何数据模型更改都很昂贵。

  • 在某些情况下,视图和控制器之间的划分并不明确。

表示-抽象-控制 (PAC)

在 PAC 中,系统被安排成许多协作代理(三元组)的层次结构。它是从 MVC 开发而来的,除了交互要求外,还支持多个代理的应用程序要求。

每个代理有三个组件 −

  • 表示组件 −格式化数据的视觉和音频呈现。

  • 抽象组件 − 检索和处理数据。

  • 控制组件 − 处理诸如控制流和其他两个组件之间的通信之类的任务。

PAC 架构类似于 MVC,因为表示模块就像 MVC 的视图模块。抽象模块看起来像 MVC 的模型模块,控制模块就像 MVC 的控制器模块,但它们的控制流和组织不同。

每个代理中的抽象组件和表示组件之间没有直接连接。每个代理中的控制组件负责与其他代理进行通信。

下图显示了 PAC 设计中单个代理的框图。

PAC Design

具有多个代理的 PAC

在由多个代理组成的 PAC 中,顶级代理提供核心数据和业务逻辑。底层代理定义详细的特定数据和演示。中间级或中级代理充当低级代理的协调员。

  • 每个代理都有自己特定的分配工作。

  • 对于某些中级代理,不需要交互式演示,因此它们没有演示组件。

  • 所有代理都需要控制组件,所有代理都通过它相互通信。

下图显示了参与 PAC 的多个代理。

PAC 中的多个代理

应用程序

  • 适用于交互式系统,该系统可以以分层方式分解为多个协作代理。

  • 当代理之间的耦合预计较松散时有效,以便代理上的更改不会影响其他代理。

  • 适用于分布式系统,其中所有代理都远距离分布,并且每个代理都具有自己的数据和交互界面功能。

  • 适用于具有丰富 GUI 组件的应用程序,其中每个组件都保留自己的当前数据和交互界面,并需要与其他组件进行通信组件。

优点

  • 支持多任务和多视图

  • 支持代理可重用性和可扩展性

  • 易于插入新代理或更改现有代理

  • 支持并发,其中多个代理在不同线程或不同设备或计算机上并行运行

缺点

  • 由于表示和抽象之间的控制桥以及代理之间的控制通信而产生的开销。

  • 由于代理之间的松散耦合和高度独立性,很难确定正确的代理数量。

  • 每个代理中的控制将表示和抽象完全分离会产生开发复杂性,因为代理之间的通信仅需要位于代理控制之间