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属性标记,引用另一个实例。
SmartEvent with kbmMW #1的更多相关文章
- kbmmw 5.10.00 发布
We are happy to announce v5.10.00 of the most complete development add on for Delphi and C++Builder ...
- kbmmw 网络研讨会视频回放(更新至11.9)
kbmmw 近期举行了几次网络视频直播,为了方便大家观看,放在了优酷上面. 1.Firemonkey for Linux and RAD Server 和kbmmw smartbing for Tli ...
- KBMMW 4.93.10 win64 一个BUG 修正
经常有人提到kbmmw 4.93.10 的64 位版本没有32位版本稳定. 经过官方确认,是delphi 编译器生成64 位代码内存偏移地址的错误. 在kbmMWGlobal.pas 中 有一个函数k ...
- KBMMW 中 IOS IPv6 的解决
自从今年苹果强制新上架的APP 必须支持Ipv6,很多原来需要网络支持的APP 就没法上架了. 别的我们就不说了,先说说kbmmw 中,如何解决这个问题. 要测试你的app 是否支持ipv6, 首先要 ...
- IOS 使用KBMMW 访问JAVA 服务
废话少说,如何使用KBMMW 做个过渡,使IOS 可以使用JAVA 的服务? 其实KBMMW 本身就要java service 的服务,但是为了把这个问题说清楚,我手工做一个例子. 首先,要使用JAV ...
- 珍惜每一滴水(kbmmw 中的内存调试)
作为一个服务器端的应用,最基本的要求就是稳定,当然要做一个稳定的服务器端,需要涉及到很多方面, 内存泄露就是稳定的一个致命杀手,因为服务器的物理内存是有限的,即使一个功能有很小的内存泄露,经过 长时间 ...
- 在指定时间干,必须干(kbmmw 中的事件调度)
从去年开始,kbmmw 慢慢增加内涵,除了完善各种服务外,陆续增加和扩展了作为一个中间件必须有的功能, 例如,权限管理.日志系统.调度系统.内存调试等功能. 今天给大家介绍一下kbmmw 的调度事件, ...
- KBMMW 4.92.00 发布
We are happy to announce the release of kbmMW Professional and Enterprise Edition. Yet again kbmMW c ...
- KBMMW 4.90.00 发布
kbmMW is a portable, highly scalable, high end application server andenterprise architecture integra ...
随机推荐
- request cluster ID mismatch
删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...
- Linux 系统中部署 LNMP 高可用负载均衡架构集群实现动态博客
(一)设计思路 高可用:keepalived 解决方案 负载均衡:(lvs)DR做轮询,需要一个调度器,后端节点两个(部署nginx动态博客),通过一个vip去访问动态博客 后端节点需要部署动态博客作 ...
- Django:django后台传递数据到js中
#奇怪传递字典时前台接收不到???datalist= [{'site': '自强学堂', 'author': '涂伟忠'}]#只要列表能接收# datalist=[[93, 93, 0, 100.01 ...
- 使用layui的form.on绑定select选中事件, form.on()不执行的原因分析
使用layui的form.on绑定select选中事件中, form.on()不执行, 主要原因有 1, select标签中没有写lay_filter属性,用来监听 <select id=&qu ...
- Python sys.path永久添加
在用户目录下,找到隐藏文件.bashrc 或 .zshrc 文件然后在末尾添加 export PYTHONPATH=$PYTHONPATH:/home/dev/custom_path 操作:vim . ...
- 项目中微信公众号调取支付控件demo
微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6 前端代码demo (JSP页面): ...
- rest_framework之三种分页器使用方法
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination ...
- python 字体染色
字体染色 <font face="黑体">我是黑体字</font> <font face="微软雅黑">我是微软雅黑< ...
- 如何制作windows live writer绿色便携版
如何制作windows live writer绿色便携版 2013年10月03日 ⁄ 综合 ⁄ 共 463字 ⁄ 字号 小 中 大 ⁄ 评论关闭 制作一个绿色便携版的wlw 1.首先下载 techli ...
- clog就用clog的后缀名
/tmp/log/shuanggou.clog /tmp/log/shuanggou.log /tmp/log/shuanggou_success.log /tmp/log/shuanggou_err ...