Ich bin neu bei RequestFactory, aber mit freundlicher Unterstützung von Thomas Broyer und nachdem ich die untenstehenden Dokumente gelesen habe, wird es sehr viel besser:)
Aber könnten Sie bitte erklären, warum Locator<>.find()
so oft (meiner Meinung nach) so oft aufgerufen wird?
In meinem Beispielprojekt habe ich zwei Entitäten Organisation und Person, die die Eltern-Kind-Beziehung pflegen. Beim Abrufen von Organization Objectify automatisch wird die untergeordnete Person abgerufen.
Außerdem habe ich zwei Methoden in meiner Serviceebene findOrganizationById
und saveOrganization
erstellt, die Objekte laden und persistieren.
Betrachten Sie nun zwei Szenarien:
Wenn ich findOrganizationById
im Client aufruft, folgen folgende Aufrufe auf der Serverseite:
Durch den Aufruf von OrderDao.findOrganizationById
habe ich bereits einen vollständigen Objektgraphen erhalten. Warum sollte .find
zusätzlich zweimal aufgerufen werden? Es ist eine zusätzliche Belastung für Datastore, die mich Geld kostet. Natürlich cache ich es, aber es wäre ordentlich, es zu reparieren. Wie kann ich diese zusätzlichen Anrufe vermeiden?
Ähnliches passiert, wenn ich Objekte durch Aufruf von saveOrganization
im Client speichere. Folgende Aufrufe erfolgen auf Serverseite:
Ich kann die Notwendigkeit verstehen, zwei Objekte aus dem DataStore zu holen, bevor aktualisiert wird. RequestFactory sendet Deltas an den Server, so dass es ein vollständiges Objekt haben muss, bevor es persistiert. Noch, da ich den vollen Graphen sofort lade, wäre es nett, keinen zweiten Aufruf zu haben, der PojoLocator.find(Key<?>(Organization(1)/Person(2)))
ist. Und ich kann wirklich nicht verstehen, dass .find()
nach dauerhaft
Gedanken?
Meine Proxies
%Vor%Mein Service
%Vor%und schließlich mein Locator & lt; & gt;
%Vor% Die Paare getId
und find
am Ende sind die Standardimplementierung von Locator#isLive
: Es wird davon ausgegangen, dass ein Objekt live ist (dh im Datenspeicher noch vorhanden ist), wenn es gefunden wird durch seine ID gibt einen Nicht-Null-Wert zurück.
RF prüft jedes EntityProxy
, das es je während der Anfrage / Antwort für ihre Lebendigkeit gesehen hat beim Aufbau der Antwort, um dem Client mitzuteilen, wenn eine Entität gelöscht wurde (auf der Client-Seite, ' d Dann feuern Sie ein EntityProxyChange
-Ereignis mit einer DELETE
Schreiboperation .
Sie können natürlich isLive
in Ihrer Locator
mit einer optimierten Implementierung überschreiben, wenn Sie eine solche bereitstellen können.
Tags und Links gwt java design gwt2 requestfactory