zoukankan      html  css  js  c++  java
  • 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属性标记,引用另一个实例。

     

  • 相关阅读:
    HDU 2955 Robberies(01背包)
    HDU 2602 Bone Collector(01背包)
    HUST 1352 Repetitions of Substrings(字符串)
    HUST 1358 Uiwurerirexb jeqvad(模拟解密)
    HUST 1404 Hamming Distance(字符串)
    HDU 4520 小Q系列故事――最佳裁判(STL)
    HDU 2058 The sum problem(枚举)
    【破解】修改程序版权、添加弹窗
    HDU 1407 测试你是否和LTC水平一样高(枚举)
    HDU 1050 Moving Tables(贪心)
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/SmartEvent_with_kbmMW.html
Copyright © 2011-2022 走看看