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 ...
随机推荐
- Jmeter响应断言--正则表达式判断纯数字
如图所示,这样是匹配14位数字,如果响应是纯数字可以直接用上
- 使用python3脚本部署mariadb主从架构
环境准备 一个脚本自动部署master服务 另一个部署slave服务 关闭主从节点的防火墙 以及事先设置好root远程登陆的权限. master import paramikossh=paramiko ...
- ContextCleaner ——Spark 应用程序的垃圾回收器
ContextCleaner是一个Spark服务,负责在应用程序范围内清除 shuffles, RDDs, broadcasts, accumulators和checkpointed RDDs,目的是 ...
- MySQL复制表结构
示例SQL: create table testdb.test_table_back like testdb.test_table
- iOS-二维码扫描界面(转)
网址学习:http://blog.csdn.net/linux_zkf/article/details/7724867 二维码扫描界面自定义 作者:朱克锋 邮箱:zhukefeng@iboxp ...
- (转)华为 安卓手机在MAC系统下 ADB 识别
使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在 ...
- 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
OpenCV中通过VideoCaptrue类对视频进行读取操作以及调用摄像头,下面是该类的API. 1.VideoCapture类的构造函数: C++: VideoCapture::VideoCapt ...
- 【VS开发】【数据库开发】libevent简单入门和介绍
libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库,今天学习下. 总体来说,libevent有下面一些特点和优势: * 统一数据源, 统一I/O事件,信号和定 ...
- 【计算机视觉】BING: Binarized Normed Gradients for Objectness Estimation at 300fps
BING: Binarized Normed Gradients for Objectness Estimation at 300fps Ming-Ming Cheng, Ziming Zhang, ...
- spring boot 复选框
jsp代码 技能: <form:checkboxes path="jineng" items="${jinengItme}" /> spring代码 ...