Author:水如烟
AOP是一个较系统复杂的概念,我是无法把握的,在这里,我只有这个念头,怎么的跟踪类中方法的动作。因此,我给它的命名空间就是MethodWatcher,参考了FileSystemWather的命名。MethodWatcher针对的是某个类,并且该类是Inherits ContexBoundObject,上文说了是有条件的,就是这个条件。
在具体列代码之前,先说说这个空间的组织。
在我这里,根命名空间是LzmTW。
基础类,声明为MustInherit的有MethodWatcherBaseAttribute,MethodWatcherBaseProperty,MethodWatcherBaseSink,这三个类就是作用于ContextBoundObject的,AOP关键的几个概念如接合点、切点之类的,就在这三个类实现。还有一个MethodWatcherAppendBaseAttribute是指示哪些方法用来Watcher的,在上文列出的有关文章中,一般是用配置文件来指出。
Use下头的两个文件,是用来作一般处理的,全是Shared。其中MethodCollection用来存放待Watcher的方法名。这个方法名用“全名”表示,就是方法所属类的全名加“+”加方法名+Append类名。MethodWatcherCommon是处理中用到的公用方法。MethodWatcherCenter来接收MethodWatcherBaseSink发出的消息。
具体运用时要实现四个类。这里,MessageForm下的MessageFormAttribute实现了MethodWatcherBaseAttribute,MessageFormProperty实现了MethodWatcherBaseProperty,MessageFormSink实现了MethodWatcherBaseSink。而MessageFormAppendAttribute实现了MethodWatcherAppendBaseAttribute。
当然,除此外,另外的还有一个对话框的,组织如下:
ProgressForm继承于MessageForm,就多了一个ProgressBar,它的Stype属性设为Marquee。
两个类都是Friend,外面的调用全由WaitingForm来处理。
当然,Form有关属性的设置,要考虑到线程。
MethodLog实现日志处理。
下文是代码的了。