我想这样做(没有特定的语言):
print(foo.objects.bookdb.books[12].title);
或者这个:
book = foo.objects.bookdb.book.new();
book.title = 'RPC for Dummies';
book.save();
foo实际上是通过某个IPC连接到我的程序的服务,并且为了访问其方法和对象,某些层实际上通过网络发送和接收消息。
现在,我并不是在寻找IPC机制,因为有很多选择。它可能不是基于XML的,而是s。日。像Google的协议缓冲区,dbus或CORBA。我不确定的是如何构建应用程序,以便我可以像访问任何对象一样访问IPC。
换句话说,如何在工艺边界上透明地映射OOP?
这不是一个设计问题,我仍然在整体架构的高水平工作。所以我对这将使用哪种语言非常不了解。不过,C#,Java和Python都可能会被使用。
答案 0 :(得分:2)
我认为做你要求的方法是将所有对象通信视为消息传递。这就是如何在ruby和smalltalk中处理对象方法。
使用消息传递(而不是方法调用)作为对象通信机制,然后在编写代码时调用不存在的方法等操作变得合理,因为对象可以对消息做一些合理的事情(检查对于远程过程,从数据库等返回具有相同名称的字段的值,或者抛出“找不到方法”异常,或者您可以想到的任何其他过程。
重要的是要注意,对于不使用此作为默认机制的语言,无论如何都可以进行消息传递(每个对象都有一个'handleMessage'方法),但是你不会得到语法细节,你赢了无需额外的努力就可以获得IDE帮助,以使IDE解析handleMessage方法以检查有效输入。
答案 1 :(得分:0)
阅读Java的RMI - 介绍性材料展示了如何获得远程对象的本地定义。
诀窍是让两个类具有相同的方法签名。该类的本地版本是某种网络协议的外观。远程版本通过网络接收请求并完成对象的实际工作。
您可以定义一对类,以便客户端可以
foo= NonLocalFoo( "http://host:port" )
foo.this= "that"
foo.save()
服务器从客户端连接接收set_this()和save()方法请求。服务器端(通常)非常重要,因为您有大量的发现和实例管理问题。
答案 2 :(得分:-1)
你不应该这样做!对于程序员来说,查看和感受代码中IPC / RPC和本地方法调用之间的区别非常重要。如果你这样做,他们不必考虑它,他们就不会考虑它,这会导致代码性能很差。
想一想:
foreach o, o.isGreen in someList {
o.makeBlue;
}
程序员假设循环需要几纳秒才能完成,相反,如果someList恰好是远程的,则需要接近一秒。