如果使用delphi实现中间层服务器,目前delphi的几种解决方案,归根到底,服务器业务组件模型都是com(/dcom/com+).
webConnection/SocketConnection是通过代理程序,WebServices也是通过web层上的ISAPI/CGI/DSO等程序代理调用,他们都是由服务器机器本地调用Com对象,配置方面就简单一些.DComConnection则是直接用RPC远程调用,不用DComConnection也可以直接用CreateComObject来创建远程对象,不过后二种配置就麻烦一点
这种架构的话,就是写com组件,输出接口方法供客户端调用,在com接口方法中实现业务逻辑,即便是在实现方法中是调用存储过程实现业务逻辑,对于客户端来说,业务逻辑仍然是在中间层业务对象中实现的,可以说仍是"真"三层(假设有真假三层之说的话).
delphi为了简化开发,提供了一个IAppServer接口,这个接口中包括了一些方便的数据获取和更新方法,大大简化了开发过程,但它的不好处,也就是delphi程序员常说的的"真假三层",通常就是针对这种使用了IAppServer接口方法来获取数据和更新数据的情况来说的.
我们通常用Delphi方法所写的三层结构程序,用的远程数据模板或MTS数据模板,,本质上就是Com对象(Dom/com+),它就是实现了IAppServer接口的对象.远程数据模板或MTS数据模板以及直接com+/dcom对象,从结构上就是三层中常说的"业务组件".
其实我们既可以方便地使用Delphi为三层结构设计的一些解决方案(核心是DataSnap的数据接头技术[TDataSetProvider],另外还有Datasnap的数据封装技术[方便地封装数据集和delta包到oleVariant和XML],DBExpress数据库驱动技术,这些技术现在都已经移值到dotNet下面,可见其功用),又可以实现"真"三层,其要点是不要直接使使用IAppserver接口方法(实质上,因为业务组件实现了这个接口,他的方法也就是业务组件的方法,只是这些接口方法比较象C/S中的数据处理流程而已),而另外创建接口和接口方法供客户端调用,在这些方法中,同样可以方便地使用Borland的数据接头技术来获取数据和更新数据,我们可以动态生成数据接头和数据集,来实现业务逻辑,有关这方面的实现,看一下TDataSetProvider文档就很清楚.
com+有非常好的安全性管理,可以精确地控制到一个接口方法的权限,而对于DCom无状态的业务对象,我们也是有办法的,在接口方法中,我们可以检查一些会话状态,这些会话状态的实现,当然要我们自己想办法,其原理和思路可以参考于为http这种非长连接的协议设计的Cookie/Session机制,如果不用讲究效率,你直接访问数据库检查权限都是可以的.但是归根到底,一定要注意到业务逻辑要放在中间层实现,安全性的最终保证也是要在中间层,而不是客户端,要知道运行在客户机器上的客户端程序,操作者可以任意修改的,甚至写一个模仿程序[
].