当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 本来想上周末没能用DELPHI实现动态代理就算了,可是这几天却始终放不下这个想法,这实在是一个太美妙的想法了。
 

 

    摘要:delphi中使用ado组件,利用udl可以在不修改源代码的情况下后台数据库可以在ms sql server与access之间切换吗?我以前以为如此,因为两者都是用的微软ado接口,只是oledb provider不同,而且都支持标准的sql语法(利用ado)。但是最近要把一个基于access的 c/s程序移植到 ms sql server的时候,才发现还是有一些不同的。主要有两点:字符串字段与自......
    摘要: 第二部分:基类 tcodecolor 一、本章说明 暂时先公开基类代码,和子类的部分代码,子类中字符分析函数 analyzer 的实现暂时不公开,主要出于这样的考虑: 1、基类已实现大部分共用功能,但是还不完善,代码也不规范。特别是各个版本的 analyzer 中都会用到这些功能,所以待听取路高手的意见,将基类改进完善后,将重写 analyzer 并在第三部分中公开; 2、如果您急于使用本程......


[技术贴]关于动态代理
本来想上周末没能用delphi实现动态代理就算了,可是这几天却始终放不下这个想法,这实在是一个太美妙的想法了.而且在认真看了vcl对soap的实现后,现在至少有九成的把握可以实现这样一个动态代理.

那么动态代理有什么用?

假设有下面这样一个接口及其实现: 【程序编程相关:如何判断一个机器的MSSQL是否启动

这要先从gof的proxy模式说起. 【推荐阅读:实现QQ窗体的缩入伸出功能

foo : ifoo;

给你,其中foo指向tfooimpl的一个实例.现在你有了ifoo的定义,与这个foo实例--注意,你没有tfooimpl的定义与实现代码.如果现在要求你为所有的ifoo.dosth增加事务功能(假设dosth被实现为对数据库作更新操作),要怎么办? 【扩展信息:一个简单的,适应多种数据库之间存取操作的

现在,如果你是这个接口的用户,而这个接口及其实现者提供了一个:

gof的proxy模式就是解决方案之一:

如果所示,首先要实现一个新的ifoo接口实现--tstaticproxy.其中用了一个属性fimpl记录了tfooimpl的实例.然后在 tstaticproxy中实现dosth与bar,并且将不需要变更的bar函数直接委托给fimpl处理,而在dosth的实现里加入事务处理即可. tstaticproxy的代码大致如下:

tstaticproxy = class( tinterfacedobject, iifoo ) private fimpl : ifoo; public constructor create( aimpl : ifoo ); function dosth( ... ) : xxx; function bar( ... ) : xxx; end; constructor tstaticproxy.create( aimpl : ifoo ); begin fimpl := aimpl; end; function tstaticproxy.dosth( ... ) : xxx; begin begintransaction; result := fimpl.dosth( ... ); endtransaction; end; function tstaticproxy.bar( ... ) : xxx; begin result := fimpl.bar( ... ); end;

然后,在所有需要用到foo对象的地方,改用新的newfoo对象,如下:

var newfoo : ifoo; begin newfoo := tstaticproxy.create( foo ) as ifoo; ... // 之后就可以把newfoo完全当作foo一样使用了. end;

可见,我们通过了一个proxy类代理了所有对ifoo接口的操作,相当于在从ifoo到tfooimpl之间插入了自己的代码,在某种程度上,这就是aop所谓的“横切”.
...   下一页

    摘要:unit mlde32unit; //micro length disassembler engine interface //作者忘记了,不好意思。好像出自29a-7。 //sorry, author! function lde32(opcode: pointer): integer; implementation function lde32(opcode: ......
» 本期热门文章:

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