在看了一大堆提到界面和代码分离的理论以后,不知道大家对command/action模式到底是怎么理解的?我在此也有如此疑问,一般情况下在dlephi中一提到command/action 模式,第一个想到的就是TActionList,TActionManager等一系列的action控件,然而似乎delphi控件的设计方式或者说事件件调用方法本身就是以command/action模式来进行设计的。也就是说不必去刻意的追求command/action模式而是在一般的编码是注意一些我看就足够了。
就我的理解以TButton的OnClick事件来说。
一般情况下,在我们的程序重要想定义这个事件直接双击该控件然后再写代码就是了,例如:
procedure TForm1.Button1Click(Sender: TObject);
begin
...;
end;
可能有人会认为这样代码和界面耦合就比较严重了因为这个函数实际上和界面混合在一起了.以后要是修改界面的话就会很麻烦了。
可是我却不这么认为,就以下为例吧:
要是想用另一个button2(或是一个menuitem或是其他的一个command事件)来实现这个功能,我可以让button2的OnClick事件指向指向Button1Click就行啊。并且在修改的时候也只是维护Button1Click这一份代码阿?
或者在其次我在button2的初始化的时候(因为button2可以动态创建)令button2.OnClick := Button1Click就行啊,我为什么要一定来实现这个所谓的TAction呢?
再说道对界面的控制,用TAction 的对象可以对界面对象进行一些简单的操作,可是在一般情况下我也可以通过调用函数的sender参数来完成相同的工作阿,比如我想让所有的调用了button1Click的空间都消失我可以这样做:
if Sender is TControl then
TControl(Sender).Visible := false;
这和调用TAction.Visible并没什么区别.