知识卡片
面向Agent风格与面向方面架构风格
内容
面向Agent风格把”事物的属性受相关人和环境影响”这一现实观察,抽象为系统的基本构成单位——Agent,定义为”一个能够根据它对环境的感知,主动采取决策和行为的软件实体”,关键属性包括自主性、交互性、适应性、智能性、协同性、移动性。这与面向对象的根本区别在于主动性:面向对象的对象是被动的,通信靠直接调用方法实现;Agent是主动的,Agent之间的通信处于知识级、通过通信原语完成,且多Agent系统中的连接关系在静态模型中几乎不可见——Agent要在系统运行时根据自身当时的状态决定是否提供某种服务,这一点传统架构对象完全不具备。面向方面架构风格(AOP)解决的是另一个问题:系统中有些需求特性横切于系统的每个层面、融入每个组件(如时间要求、业务逻辑、性能、安全性、错误检测),这类”横切关注点”如果按传统方式散落嵌入各个模块,会导致代码混杂分散、可追踪性差、复用性不好、系统演化困难。AOP的解法是在传统架构基础上新增”方面组件”(aspect component)来专门封装这些横切关注点,把原本嵌入到各处的公共行为抽离成独立的横切模块——这与面向对象形成互补而非竞争关系:面向对象擅长为同一对象层次的公用行为建模,但难以处理跨越多个无关对象模型的公共行为,而这正是AOP的用武之地;AOP还能让系统”层次化功能性而不是嵌入功能性”,代码可读性和可维护性因此提升。两种风格的共同点是都在传统的”组件+连接件”骨架之外,引入了一种能够跨越常规边界(Agent跨越”静态可见的连接关系”,方面跨越”单一模块边界”)的新元素,来应对传统架构风格处理不了的复杂性来源。
参考来源
- 位置:《软件架构理论与实践》第4章《软件架构的风格与模式》"4.3.14 面向Agent风格"及"4.3.15 面向方面架构风格"节(源文件:_epub-src/OEBPS/text00034.html)
- 结论依据:原文说明"面向对象一般是被动的,对象之间的通信是通过直接调用方法实现的。而面向Agent的方法……Agent是主动的",并说明AOP"在传统软件架构基础上增加了方面组件(aspect component)这一新的构成单元,通过方面组件来封装系统的横切关注点",直接支撑本卡片对两种风格核心机制的归纳。
- 原始内容:Agent可定义为"一个能够根据它对环境的感知,主动采取决策和行为的软件实体",其关键属性主要有自主性、交互性、适应性、智能性、协同性、移动性等……系统的有些特性和需求横切于系统的每一个层面并融于系统的每一个组件中,这种特性称为系统的方面(aspect)需求特性或关注点。