SmartEvent with kbmMW #1
前言
前面的文章,我写了有关SmartBinding框架方面的内容。SmartBinding的目的是将数据容器绑定到一起,通常情况下,数据容器可以是显示数据或与数据交互的控件(Edit,ListView...),也可以是存储数据的容器,如查询结果的DataSet,ObjectList或Record等。SmartBinding还引入了数据代理,这使得将可视设计与功能同核心数据操作/检索/存储分离。
在kbmMW新版本中,增加了SmartEvent。SmartEvent的主要目的是将用户交互与业务逻辑分开,换句话说,就是避免使用事件处理机制。
可能有开发者说,用ActionList,这就是解决方法,这的确是种方法,但TActionList仍然是一种固定的,非常简单的操作事件的方法,SmartEvent比这更通用。
开始深入研究
SmartEvent到底是什么呢?
本质上说,SmartEvent就是一个发布/订阅的通知框架。
procedure TForm1.ShowSomeMessage(const AMessage:string);
这是一个常见的方法,现在我们为他定义一个“主题”,使得这个方法变成一个可以被通知的方法。
TForm1 = class...
...
[kbmMW_Event('SHOW.ERROR')]
procedure TForm1.ShowSomeMessage(const AMessage:string);
...
什么是“主题”呢?
主题就是一句话,用点分隔的单词。例如,可以将一个主题命名为:SHOW.ERROR或SHOW.INFO或SHOW.ICECREAM或SHOW.FOOD.BANANA等。
基本上,您可以定义主题。它甚至不必包含点。但是通常来说,使其具有层次结构是一个好主意,从某种意义上说,您必须以逻辑上通用的上下文词开头,并以与当前主题匹配的更专业的词结尾。
然后,当您想通知潜在订户有关您要显示的错误时,只需发送主题为“ SHOW.ERROR”的通知。
因此,现在我们知道什么是主题了,接下来学习如何订阅该主题。
在上面的情况下,我们希望每次有人发布SHOW.ERROR通知时都调用ShowSomeMessage方法。就象下面这样发出通知:
...
Event.Notify('SHOW.ERROR','Some error happened');
...
当然,为了让ShowSomeMessage能接到通知,还需要告诉SmartEvent当前Form的实例,如在Form的OnCreate事件,写出如下代码:
...
Event.Subscribe(self);
...
Self是Form实例,还可以引用kbmMW_Event属性标记,引用另一个实例。
最新文章
- wdcp安装
- 抓取网页内容生成kindle电子书
- .Net面試4套
- 最小二乘法 python实现
- oracle删除用户及其名下对象
- ubuntu系统下创建软件桌面快捷方式
- 了解XSS攻击
- USB2.0的基本学习
- struts jsp传值到action,乱码的解决方案
- android Intent.createChooser 应用选择
- 【Hook技术】实现从";任务管理器";中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
- Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)
- ida 调试 android fork
- [20171113]修改表结构删除列相关问题4.txt
- SqlServer 添加用户 添加角色 分配权限
- Gym 101775J Straight Master(差分数组)题解
- 论文笔记之:Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach
- Servlet中web.xml的配置
- 揭开Future的神秘面纱——任务执行