前言

前面的文章,我写了有关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属性标记,引用另一个实例。

最新文章

  1. wdcp安装
  2. 抓取网页内容生成kindle电子书
  3. .Net面試4套
  4. 最小二乘法 python实现
  5. oracle删除用户及其名下对象
  6. ubuntu系统下创建软件桌面快捷方式
  7. 了解XSS攻击
  8. USB2.0的基本学习
  9. struts jsp传值到action,乱码的解决方案
  10. android Intent.createChooser 应用选择
  11. 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展
  12. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
  13. Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)
  14. ida 调试 android fork
  15. [20171113]修改表结构删除列相关问题4.txt
  16. SqlServer 添加用户 添加角色 分配权限
  17. Gym 101775J Straight Master(差分数组)题解
  18. 论文笔记之:Heterogeneous Face Attribute Estimation: A Deep Multi-Task Learning Approach
  19. Servlet中web.xml的配置
  20. 揭开Future的神秘面纱——任务执行

热门文章

  1. spark报错:invalid token
  2. IIS添加对ashx文件的支持
  3. 【opencv】split
  4. ubuntu16.04 TLS安装java
  5. 如何禁用maven下载进度指示?
  6. Ext this.getView(...).saveDocumentAs is not a function
  7. rsyslog服务日志报错分析1
  8. PAT(B) 1012 数字分类(Java)
  9. Kubernetes 学习笔记(五):数据卷
  10. ActiveMQ 消息存储持久化