RequestFactory Theorie: Warum wird Locator.find () so oft aufgerufen?

8

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:

%Vor%

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:

%Vor%

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

aufruft

Gedanken?

Meine Proxies

%Vor%

Mein Service

%Vor%

und schließlich mein Locator & lt; & gt;

%Vor%     
expert 28.02.2012, 04:22
quelle

1 Antwort

6

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.

    
Thomas Broyer 01.03.2012, 16:55
quelle

Tags und Links