Frage

Ich möchte diese (keine bestimmte Sprache) tun:

print(foo.objects.bookdb.books[12].title);

oder folgt aus:

book = foo.objects.bookdb.book.new();
book.title = 'RPC for Dummies';
book.save();

Wo foo tatsächlich ein Dienst an meinem Programm über einige IPC verbunden ist, und seine Methoden und Objekte zuzugreifen, tatsächlich einige Schicht sendet und empfängt Nachrichten über das Netzwerk.

Nun, ich suche nicht wirklich für einen IPC-Mechanismus, da es viele zur Auswahl. Es ist wahrscheinlich nicht XML-basierte zu sein, sondern s. th. wie Google-Protokollpuffer, dbus oder CORBA. Was ich bin nicht sicher ist, wie die Anwendung so zu strukturieren, kann ich den IPC zugreifen, so wie ich würde jedes Objekt.

Mit anderen Worten, wie kann ich OOP, die transparent über Prozessgrenzen hinweg abbildet?

Nicht, dass dies ist eine Design-Frage und ich arbeite immer noch auf einem ziemlich hohen Niveau der Gesamtarchitektur. So bin ich ziemlich Agnostiker noch darüber, welche Sprache diese in sein wird. C #, Java und Python sind alle wahrscheinlich zu gewöhnen, aber.

War es hilfreich?

Lösung

Sie sollten es nicht tun! Es ist sehr wichtig für Programmierer den Unterschied zwischen einem IPC / RPC und einem lokalen Methodenaufruf im Code, um zu sehen und zu fühlen. Wenn Sie es so machen, dass sie sich darüber nicht nachdenken, werden sie nicht darüber nachdenken, und das wird zu sehr schlechte Leistung Code führen.

Denken Sie an:

foreach o, o.isGreen in someList { 
   o.makeBlue; 
}

Der Programmierer geht davon aus, dass die Schleifen ein paar Nanosekunden dauern, anstatt es dauert nahe an einem zweiten, wenn someList Fern passiert sein.

Andere Tipps

ich glaube, die Art und Weise zu tun, was Sie fordern alle Objektkommunikation als Message-Passing angesehen haben. Dies ist, wie Objektmethoden behandelt werden, in Ruby und Smalltalk, unter anderem.

Mit Nachricht (statt Methode aufrufen) als Objekt Kommunikationsmechanismus vorbei, dann solche Operationen wie der Aufruf eine Methode, die nicht existieren, wenn Sie den Code schreiben sinnvoll wird, wenn das Objekt etwas Vernünftiges mit der Nachricht sowieso tun kann (Scheck für ein Remote-Verfahren, einen Wert für ein Feld mit dem gleichen Namen aus einer Datenbank zurückgeben, usw., oder eine ‚Methode nicht gefunden‘ Ausnahme auslösen, oder irgendetwas anderes denken könntest).

Es ist wichtig, dass für Sprachen zu beachten, dass diese als Standard nicht Mechanismus verwenden, können Sie Nachricht sowieso vorbei tun kann (jedes Objekt hat eine ‚handle‘ -Methode), aber Sie werden die Syntax Nettigkeiten nicht, und Sie gewonnen ‚t in der Lage sein, IDE-Hilfe auf Ihrer Seite, ohne etwas mehr Aufwand zu erhalten, die IDE zu bekommen, um Ihre Methode handelte zu analysieren für gültige Eingaben zu überprüfen.

Lesen Sie oben auf Java RMI - die einleitenden Material zeigt, wie Sie eine lokale Definition eines entfernten Objektes haben.

Der Trick ist, zwei Klassen mit identischen Verfahren Unterschriften haben. Die lokale Version der Klasse ist eine Fassade über einige Netzwerkprotokolle. Die Remote-Version empfängt Anfragen über das Netzwerk und macht die eigentliche Arbeit des Objekts.

Sie können ein Paar von Klassen definieren, so kann ein Client

foo= NonLocalFoo( "http://host:port" )
foo.this= "that"
foo.save()

Und der Server empfängt set_this () und save () -Methode Anfragen von einer Client-Verbindung. Die Server-Seite ist (in der Regel) nicht-trivial, weil Sie eine Reihe von Entdeckungen und Instanz-Management-Themen haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top