IoC(Inversion of Control)是一个很宽泛的概念,对于我们常说的IoC容器(如spring)所做的工作,一个更加准确一些的说法是依赖注入(Dependency Injection), 即容器将一个对象所依赖的其他对象push到该对象中,而不是该对象从外界环境pull相关的依赖对象. 不过, 细究起来这种依赖注入仍然只是DI的一种特殊形式, 可以将它称之为data dependency injection, 因为IoC容器所许诺的是: "啊哈, 当我们需要对象A的时候,它就在这儿". 虽然IoC容器管理的不仅仅是数据,而是具有行为的对象,但是如果要让这些行为具体发生, 我们仍然需要额外的调用步骤.
对于一个自动触发behaviour的系统, 我们一般将之称之为引擎(Engine). 例如工作流引擎在处理完本步骤的业务逻辑之后会自动触发流程流转操作. 一个引擎对于我们的承诺是: "当我们需要某个behaviour的时候, OK, 它会在适当的时候发生的". 对于一个软件开发框架或者更宏大的软件开发平台而言, 如果我们以业务逻辑为主体来审视整个程序运行过程, 则它们的核心价值也在于在适当的时候将适当的操作Inject到业务逻辑中. 对于目前所谓的软件开发平台而言, 除了工作流的内容之外, 一个主要部分就是CRUD(Create/Read/Update/Delete) Ready. 一个开发平台的优劣往往直接体现在它在多大程度上能够将CRUD操作剥离出主体程序逻辑, 这不仅仅涉及到数据库存取操作, 同时还包含界面交互, 数据逻辑关联等.
除了引擎,框架,平台等应用层面的实现之外, AOP(Aspect Oriented Programming)在语言层面为behaviour注入也提供了一种特定的实施手段. 在AOP的概念中, 往往作为切点的函数被认为是基础的部分, 而interceptor是在基础蓝图上的一种扩展. 这也体现在基础函数定义了当时执行环境中可以访问的状态变量(参数/属性),而interceptor则依附于pointcut处所能得到的状态变量, 它本身一般并不维护独立的状态变量(不产生也不消灭状态变量). 从数学上看, base function和interceptor之间构成一种对偶(dual)关系, 当我们的关注重点转移到interceptor上来之后, 它本身也应该具有完整的业务语义, 这需要对AOP的执行过程做小小的偏置处理.
在witrix平台的BizFlow设计中,BizFlow是通过类似AOP的方法作为CRUD操作的Filter实现的, 但是从bizflow本身的配置文件来看,它可以构成一个完整的业务描述, 而CRUD成为某种自动注入的behaviour.例如对于新增操作, BizFlow中的配置可以如下
<action id="Add-default">
</action>
虽然没有写任何代码, 新增操作(包括从request中读取操作并做有效性校验等操作)是自动进行的. 我们也可以在新增前和新增后分别执行一些操作
<action id="Add-default">
<source>
some operation before add
<biz:Proceed/>
some operation after add
</source>
</action>
与AOP中的常见做法不同, 这里并没有明确定义新增前和新增后这样的切点, 而只是定义了Add-default这样一个action. 在BizAction的source段可以执行任何tpl代码, 而tpl代码的执行上下文可以看作一个Map, tpl代码执行过程中可以获取变量, 也可以设置任意变量, 因而bizFlow拥有对于状态空间的完全的控制权.
分享到:
相关推荐
Enhanced chapters teach you how to use Selenium to drive your application and handle asynchronous Ajax calls, and new chapters cover Dependency Injection (DI) and advanced techniques to help keep ...
在Unity引擎的游戏开发中,行为树(Behaviour Tree)已经成为控制角色智能行为的重要工具。"Behaviour Machine Pro",正如其标题所示,是Unity平台上的一个顶尖行为树插件,被誉为游戏与项目开发的必备神器。这个...
Enhanced chapters teach you how to use Selenium to drive your application and handle asynchronous Ajax calls, and new chapters cover Dependency Injection (DI) and advanced techniques to help keep ...
### Erlang Supervisor Behaviour详解 #### 一、Erlang Supervisor简介与作用 Erlang Supervisor是Erlang四大Behaviour之一,主要负责管理监控树(supervision tree)中的子进程,确保系统的稳定运行。在Erlang...
非等温自催化模型中的时空行为是指在自催化反应过程中,温度的非均一性对化学反应动力学和扩散行为产生影响的情况。这种现象在实验和数值模拟中都得到了广泛的研究。非等温自催化模型关注的是在化学反应中由于反应热...
Behaviour Designer Ver.1.6.2 最新版 官方下载 新鲜出炉 仅供学习使用 适用版本Unity5.6.0以上
### 动态系统行为探索:并行与分布式仿真系统 #### 标题解析 标题“Modeling and Simulation: Exploring Dynamic System Behavior”(建模与仿真:探索动态系统行为)指出本文档的主要研究方向是通过建模和仿真技术...
桥梁结构
gimbal_behaviour.c
Behaviour Machine is a visual scripting plugin that enables the design of Hierarchical Finite State Machines and Behaviour Trees in the Unity game engine. With Behaviour Machine, designers and artists...
从给定的文件信息中,我们可以提取并详细解释以下知识点: ### 标题中的知识点: - **Tribological behavior and wear mechanism of MoS2–Cr coatings**:说明文档主要研究二硫化钼(MoS2)和铬(Cr)组成的涂层在不同...
FeCoNiCuSnx高熵合金腐蚀性能,李建忱,张翠,FeCoNiCuSnx 高熵合金为单一的FCC固溶体。当Sn含量达0.09%时,出现少量的BCC相。FeCoNiCuSnx 合金在碱性溶液中有宽化的钝化区,而在氯化钠溶�
《用户行为数据分析:GrowingIO 实战指南》是一本深度探讨如何利用用户行为数据来驱动企业增长的专业书籍。书中详尽地介绍了用户行为分析的重要性和实施步骤,旨在帮助互联网及互联网+企业的相关人员建立全面的数据...
Breeze - Advanced Character Behaviour v1.02
基于BehaviourTree行为树编写的一个BossAI,包含巡逻,追踪玩家,追中到玩家后随机选着攻击事件,被玩家攻击后死亡。适合刚学习的BehaviourTree同学 当作入门的教程
unity BehaviourTree流程控制插件
### 知识点一:WebRTC与实时通信 #### WebRTC概述 WebRTC(Web Real-Time Communication)是一种允许网页浏览器进行实时通信(RTC)的技术。它由一系列的技术组成,包括音视频流、对等连接以及数据共享等。...
### P2P_Behaviour_Detection #### Peer-to-Peer (P2P) Behaviour Detection by TCP Flows Analysis **背景与重要性** 随着互联网技术的发展,P2P(Peer-to-Peer)应用变得越来越普遍,如Gnutella、Kazaa、...
行为树(Behaviour Tree)是一种在游戏AI和机器人科学中广泛使用的编程范式,它允许开发者以一种直观且灵活的方式描述复杂的行为逻辑。在本案例中,"egret-BehaviourTree.zip" 是一个包含TS(TypeScript)语言实现的...
With Opsive's Behavior Designer, you can bring the power of behaviour trees to Unity! Behavior Designer is a behaviour tree implementation designed for everyone - programmers, artists, designers.