用Delphi实现动态代理(1):概述》中,对动态代理作了一个概要的说明,比如为什么需要这样的动态代理,它有什么用等。">
在上篇«aspx">用delphi实现动态代理(1):概述»中,对动态代理作了一个概要的说明,比如为什么需要这样的动态代理,它有什么用等.本篇将对我实现的这个动态代理的设计思路作一下介绍. 【程序编程相关:进程查看器1.2版,欢迎下载 】
[mental studio]猛禽[blog] 【推荐阅读:利用Indy的TIdFtp控件实现FTP】 【扩展信息:保存页面为MHT的代码 】一.设计目标
如上篇中这幅动态代理结构图所示:
大致的设计目标有以下几项:
tmdynamicproxy可以将任意接口代理到一个通用接口iminvocationhandler上; iminvocationhandler的实现不能太复杂,即tmmethodinvocation的定义要尽量简单; iminvocationhandler要能够实现remoting,即tmmethodinvocation必须可序列化; 需要一个immethodinterceptor接口,以便于实现aop所需要的各种拦截器; 需要一个tminterfaceinvoker来把iminvocationhandler转为正确的对象调用.从上面列出的目标可以看出,我的目标是要实现一套全新的多层框架,并且几乎是对java世界里最流行的轻量容器的模仿.接下来就说明一下原因所在.
二.原因
我之所以对这个动态代理如此热情,源自于对delphi下多层技术的愤怒.想想从前在delphi开发多层应用有些什么?midas?不可否认,midas是一项很优秀的开发技术,可以在很大程度上简化多层应用的开发.但是正因为它的简单化,所以它跟rad一样,容易让人在简单化中迷失,而看不到问题的本质--对于这种事情,我喜欢引用老郑的一个经典比喻:就像比基尼泳装,它展示了令人感兴趣的部分,但却隐藏了关键的部分.这导致的结果就是开发出大量的垃圾多层应用--至少跟大部分java或corba多层应用相比是这样的.
虽然李维写了«delphi 5.x多层分布式应用»系列三本书,试图深入地解析一下midas,但是一方面是在这浮躁的氛围下大多数人没有心思深入研究,另一方面则是midas的先天不足.
上图是我在2001年写的一份书稿[1]里的一幅插图,基本上可以说明midas的整体结构,从图上可以看出midas没有自己的基础技术.
其中dcom.socket/tcp.web/http三种连接方式,本质上还是通过com技术实现的.socket与web连接是借助于scktsrvr与httpsrvr两个代理程序在服务端与客户端之间建立一个tunnel来绕过windows的安全机制或是firewall.... 下一页