最近正在做一个关于remoting的architecture,查阅一些资料后,觉得.net的remoting实现大致可分为以下几类:
Shared Implementation
在客户端需要部署服务端的Assmebly。
优点:1。几乎和开发一般的代码没有区别。没有太多的额外工作量
2。因为new操作符被系统重载,只需非常简单的变化,可以方便的在本地调用/remoting之间切换。
缺点:1。在客户端需要部署服务端的Assembly,多数情况下这并不是一个好方法,开发方一般都希望避免这种情况,因为代码会暴露在ildasm等工具之下。
在Client和Server端共享一个只包含接口或抽象基类的dll.
优点:1。Server端的实现变化,无需影响客户端的部署。
缺点:不能简单的在本地/remoting之间简单切换,因为在客户端,不能用new操作符来初始化interface或抽象基类。
用工具生成metadata dll,客户端代码可以reference这个dll,这样就避免了暴露代码的危险。如果用VStudio开发并配以适当的脚本,这种方式会优于第一种方式。
从微软的资料来看,它相当推荐最后一种方式。不过在项目设计中,我采用了第2种方式略加变化。因为个人认为,C/S的解耦是更重要的设计方向,虽然在开发上会降低一定的效率(所有remote方法必须定义成接口形式),但在大的项目上(或者从整个企业架构)以至于设计模式来说,都是利大于弊的。