表示-抽象-控制——系统结构模式学习笔记
表示-抽象-控制(PAC)体系结构模式以合作agent的层次形式定义了交互式软件系统的一种结构。每个agent负责应用程序功能的某一特定方面,并且有表示,抽象,控制三个组件构成。这种细分将agent的人机交互部分和与其功能内核和它与其他agent的通信分割开来。
1. 例子
一个简单的有比例表示的政治选举系统。
2. 语境
在agent的协助下开发一个交互式应用程序。
3. 问题
在这种写作的agent体系结构中,为某一特定任务指定一个agent,所有的agent提供所有系统的功能。
1) agent通常维护他们自己的状态和数据;
2) 由于他们各自的人机交互常常差别较大,交互agent提供他们各自的用户接口。
3) 系统随时间变化,他们的表示特性特别易于变化。
4. 解决方案
以PAC agent树状层次结构构建交互式应用程序。应有一个顶层agent,几个中间层agent,多个底层agent。每个agent分别都负责应用功能的某一特定方面,并且由抽象,控制,表示三个部分(组件)构成:(?为什么需要这么多的agent,可以理解为一个模块吗?)。
1) 表示组件提供PAC agent的可视行为。
2) 抽象组件维护了构成agent基础的数据模型,并提供对这些数据进行操作的功能。
3) 控制组件连接表示与抽象组件,并且负责与其他的PAC agent通信。
顶层的agent提供系统的核心功能。
底层的agent表达一些独立语义概念。用户可以基于这些概念进行工作,如:电子表单和图表。
中层的agent表达了底层agent的组合或底层agent之间的关系。
5. 结构
1、顶层agent
它应该是整个系统的核心部分。它维护了整个系统的全局数据模型。
1) 抽象组件负责维护整个系统的全局数据模型。
2) 表示组件通常没有什么实际的用处。
3) 控制组件的功能包括:为底层agent提供服务以操作全局数据;维护agent的层次结构;保存用户与系统的交互信息:(?为什么在这里保存)
2、底层agent
底层agent给出了应用领域的一个具体语义概念(比如,柱状图)。
1) 表示组件给出了对应于语义概念的一个具体视图。并保存了视图的信息。
2) 抽象组件的功能和顶层agent抽象组件功能类似,负责维护agent的数据,不同的是,这些数据时这个agent私有的。
3) 控制组件负责表示组件和抽象组件的通信,避免他们的直接依赖。另外,负责和更高层的agent进行通信。
3、中层agent
作用是合作与协作。用于当一个复杂对象由多个底层agent构成,它维护这多个底层agent。
另外一个作用是维护底层agent之间的一致性。例如,协调相同数据的多个视图。
抽象组件维护他的特有数据,表示组件实现了它的用户接口,控制组件具有负责和其他agent通信。
6. 动态特性
主要描述了两个动态特性:
1) 用户调用一个新的图形。视图协调agent向图形agent发送open请求;图形agent控制组件收到请求,并且向顶层agent申请数据;顶层agent控制组件收到请求后,通过抽象组件获取数据,并返回给图形agent控制组件;图形agent控制组件将数据发送给抽象组件;抽象组件保存数据;控制组件调用表示组件生成图形;
2) 用户输入一个数据。用户通过电子表单输入数据;电子表单的控制组件间数据发送至顶层agent;顶层agent控制组件收到数据,通知抽象组件更新数据;抽象组件通知控制组件更新所有依赖于数据的agent;控制组件通知协调程序agent。
7. 实现
1) 定义一个应用模型。
A. 系统应提供哪些服务;
B. 哪些组件提供这些服务;
C. 组件间关系如何;
D. 如何协作;
E. 各组件对什么数据进行操作;
F. 用户如何与软件进行交互;
2) 为组织pac 层次定义一般策略。当一组agent依赖于一个agent是,把这个agent看成是这组agent的根。选择一个合适的层的深度,过深或过浅均不好。
3) 明确说明顶层agent。这是整个系统的核心。
4) 明确说明底层agent。这是用户可操作和观察的最小单元。
5) 明确说明系统服务的底层agent。比如,通信agent,错误处理agent。
6) 明确说中间agent。包括两种,一种负责协作,一种负责组合。
7) 从人机交互中分离核心功能。
8) 提供外部接口。
9) 连接各层次。
8. 效果
1) 事务分离;
2) 支持变化和扩展;
3) 支持多任务;
不足:
1) 增加复杂性;
2) 负责的控制组件;
3) 效率;
4) 可应用性;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架