设计问题:我如何可以透明地访问IPC机制?
-
10-07-2019 - |
题
我想这样做(没有特定的语言):
print(foo.objects.bookdb.books[12].title);
或这样的:
book = foo.objects.bookdb.book.new();
book.title = 'RPC for Dummies';
book.save();
其中foo实际上是通过一些IPC连接到我的节目的服务,并且访问其方法和目的,一些层实际上发送,并通过网络接收消息。
现在,我真的不想找一个IPC机制,因为有很多选择。这可能不会是基于XML的,而是秒。日。像谷歌的协议缓冲区,DBUS或CORBA。什么我不能确定的是如何构建的应用程序,这样我可以访问IPC就像我对待任何物体。
在换句话说,如何可以有OOP该透明地进程边界映射?
不,这是一个设计问题,我仍然在一个相当高的水平整体架构的工作。所以我敢无关但有关此将是语言,C#,Java和Python都可能习惯,虽然。
解决方案
您不应该这样做!程序员们看到和感受到的IPC / RPC和在代码中调用本地方法之间的区别是非常重要的。如果你把它的话,那他们没有去想它,他们不会去想它,这将导致执行非常不好的代码。
的思考:
foreach o, o.isGreen in someList {
o.makeBlue;
}
在程序员假定循环需要几纳秒来完成的,而不是需要接近第二如果someList恰好是远程的。
其他提示
我觉得做你的要求是什么方法是让视为消息传递的所有对象的通信。这是对象的方法是如何在Ruby和Smalltalk处理,等等。
通过消息传递(而不是方法调用)作为对象的沟通机制,然后操作,如拨打电话时,你写的代码变得懂事的对象可以做一些合理的与消息反正是不存在的方法(检查对于远程过程,一个字段具有相同名称从数据库中返回一个值,等等,或抛出一个“未找到方法”的异常,或其他任何你能想到的)。
要注意,不使用此作为默认语言的机制是很重要的,你可以做消息传递反正(每个对象都有一个“的handleMessage”方法),但你不会得到语法细微的,你赢了“T能够得到IDE的帮助,而不需要您一些额外的努力得到IDE解析您的handleMessage方法来检查有效输入。
阅读上的Java的 RMI - 引言材料显示了如何有远程对象的本地定义
诀窍是有两个类具有相同的方法签名。类的本地版本是在一些网络协议的门面。远程版本在网络上接收请求并执行对象的实际工作。
可以限定一对类这样的客户机可具有
foo= NonLocalFoo( "http://host:port" )
foo.this= "that"
foo.save()
和服务器接收set_this()和保存从客户端连接()方法的请求。服务器端(通常)不平凡的,因为你有一大堆的发现和实例管理问题。