用Delphi实现动态代理(1):概述》中,对动态代理作了一个概要的说明,比如为什么需要这样的动态代理,它有什么用等。"> 用Delphi实现动态代理(2):设计说明 [Mental Studio]猛禽[Blog] 在上篇《aspx">用Delphi实现动态代理(1):概述》中,对动态代理作了一个概要的说明,比如为什么需要这样的动态代理,它有什么用等。_程序员之家(用Delphi实现动态代理(2):设计说明 )
    当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 用Delphi实现动态代理(2):设计说明 [Mental Studio]猛禽[Blog] 在上篇《aspx">用Delphi实现动态代理(1):概述》中,对动态代理作了一个概要的说明,比如为什么需要这样的动态代理,它有什么用等。
 

 

    摘要:用delphi实现动态代理(1):概述 [mental studio]猛禽[blog] 一、问题 所谓动态代理(dynamic proxy),要先从gof的proxy模式说起。 假设有一个ifoo接口:{$m+} ifoo = interface( iinterface ) [{3a85e46d-f3d4-4d9c-a06c-4e7c1bac9361}] function dosth......
    摘要: 一个设计优良的试题库系统,除了支持文本数据以外,还应该支持公式、图片、表格等非文本数据,这样才能很好地支持已有的试题形式。笔者前一阵子使用过一个“xxx考核题库系统”,该软件使用paradox作为数据库,只能支持文本题目,无法满足现实试题的要求,为此对其进行了更改。 对于非文本数据的支持可以采用ole嵌入word文档的方法,但这种技术实现起来比较复杂,本文给出一种简单而实......


用Delphi实现动态代理(2):设计说明
用delphi实现动态代理(2):设计说明

在上篇«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.
...   下一页

    摘要:由于看到前些日子retina里有个不需要预先知道帐号就可以获取一般任意 目标nt主机帐号的功能。几个月之前,我为了弄清原理,就做了一个工具。 这次整理硬盘,发现了这个小工具,这本身并不算什么,因为iss scanner等 软件都包含了这类功能。但是我希望大家能够通过这个例子,了解一些nt的 api和安全性知识。 -- 完整的code(use delphi)和一个编译好的zip文件在 ftp......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE