Neu zu bewerten oder erneut abonnieren?


Dieser Artikel soll erklären, abgeleiteten Mitglieder in ECO. Es ist Hauptzweck ist, die Differenz zwischen der ReEvaluateSubscriber und ReSubscribeSubscriber-Parameter, wenn Sie Member im Code ableiten zu beschreiben.

Eine der hervorragenden Eigenschaften von Fett, die um den Übergang über Öko machen haben ist abgeleiteten Member. Abgeleiteten Mitglied ist ein bisschen wie ein berechnetes Feld auf ein Dataset, außer es nur zum ersten Mal berechnet wird Sie seinen Wert und dann diesen Wert wird zwischengespeichert, um Verarbeitungszeit anfordern.

Nehmen Sie als Beispiel der Person FullName. Vollständiger Name würde wie folgt berechnet

Ergebnis: = Titel + ' ' + Vorname + '' + LastName;

Der erste wichtige Schritt zur Schaffung eines solchen Attributs in ECO wird das Attribut Derived markiert. Es ist tatsächlich möglich, geben einige 'Ableitung OCL' und haben das ECO-System alles für Sie ableiten

Titel + ' ' + Vorname + '' + LastName

aber dieser Artikel soll Ihnen zeigen, wie viel kompliziertere Szenarien zu behandeln.

Sie erwarten mit einem typischen DataSet berechnetes Feld die Methode berechnet werden, jedes Mal, wenn der Wert angefordert wird. Wenn das aktuelle Objekt als Liste in angezeigt wird einem dann das Aufrufen dieser Methode für jede Instanz jedes Mal neu, das DataGrid-Steuerelement zeichnet DataGrid kann CPU-intensiv, vor allem, wenn der Wert von vielen anderen Attribute/Objekten berechnet wird.

Eco, die die Methode zum ersten Mal ausgeführt wird der Wert angefordert wird, jedoch dann das Ergebnis wird zwischengespeichert werden automatisch in den ECO-Raum. Zukünftige Anforderungen für den Wert dieses abgeleiteten Members werden stattdessen den zwischengespeicherten Wert zurückgeben. Das Potenzial für CPU sparen hier liegt auf der Hand, vor allem mit komplizierten Routinen.

Eine Code-abgeleitete Methode für ein Mitglied hat einen bestimmten Namen + Parameterliste, ECO verwendet Reflektion, um die Methode zu finden. Die Struktur ist

Funktion < MemberName > DeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): < MemberType >;

in unserem Beispiel FullName erwarten ECO finden

Funktion FullNameDeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): string;

Das ist des Problems hier. Wenn der Wert des Elements abgeleitet wird nur einmal berechnet und dann zwischengespeichert, was geschieht, wenn der Wert der Titel, Vorname oder Nachname ändert?

Das ECO-Framework hat offensichtlich keine Ahnung, was wir getan haben, um den Wert dieses Members ableiten, noch welche Objekte/Member verwendet wurden, um es zu berechnen. Um sicherzustellen, dass ECO, den es muss wissen gibt, wann dieser Member neu berechnet werden, sollten, nie einen falschen Wert. In der Tat was es eigentlich wissen muss ist, wenn dieses Mitglied 'Ungültig' gekennzeichnet werden soll, wird nicht neu berechnet werden bis ihr Wert angefordert wird.

Das ECO-Framework verwendet eine Art Beobachter-Muster der relevanten Objekte/Mitglieder zu sehen, wann immer eine dieser werden verändert die EcoSpace wird markieren des abgeleiteten Members ungültig (Ableitung eines Mitglieds über 'Ableitung OCL' findet diese Abonnements automatisch). So sieht unser Code jetzt soetwas

Funktion FullNameDeriveAndSubscribe (ReEvaluateSubscriber, ReSubscribeSubscriber: ISubscriber): string;
beginnen
Ergebnis: = Titel + ' ' + Vorname + '' + LastName;
Jetzt sind wir Ort oder 'Abonnements'
Self.AsIObject(). Eigenschaften ['Title']. SubscribeToValue(ReEvaluateSubscriber);
Self.AsIObject(). Eigenschaften ['Vorname']. SubscribeToValue(ReEvaluateSubscriber);
Self.AsIObject(). Eigenschaften ['Nachname']. SubscribeToValue(ReEvaluateSubscriber);
Ende;

Die 'ReEvaluateSubscriber' ist ein Beobachter-Objekt, das uns von irgendwoher übergeben wird in das Innenleben des ECO Frameworks. Alles, was wir tun müssen, ist, um sicherzustellen, dass wir es für alle relevanten Objekte/Mitglieder abonnieren. Wann immer eines dieser abhängigen Elemente haben ihren Wert verändert, wird die ReEvaluateSubscriber ECO Rahmen sagen, dass der Wert der oder Mitglied 'nächste Mal, wenn es angefordert wird neu bewertet werden sollte'.

Neu zu bewerten oder erneut abonnieren?
Damit komme ich zum letzten Punkt. Es gibt zwei Abonnenten an unsere-Methode übergeben, 'ReEvaluateSubscriber' und 'ReSubscribeSubscriber', so was tut der anderen ein, und wann verwendet werden sollte?

Im vorherigen Beispiel verwendet wir die ReEvaluateSubscriber, da wir nur wissen, wann die Werte der Titel, Vorname oder Nachname ändern mussten. In ein komplizierteres Beispiel, was, das wir tun musst, kompliziert etwas mehr strukturell, wie jedes OrderLine ein PurchaseOrder durchlaufen und Mitglieder dieser verwandte Objekte stattdessen abonnieren.

In solchen Situationen was geschieht, wenn eine neue OrderLine hinzugefügt wird? Abonniert wir kann möglicherweise bereits ein Objekt nicht haben die noch bestanden hatte nicht an dem Punkt, dass wir unsere Abonnements gelegt? Was passiert, wenn ein OrderLine entfernt oder gelöscht wird?

Das ist genau das, was für die ReSubscribeSubscriber ist. Diese Abonnenten ausgelöst werden sollte, wann immer wir wollen sagen 'Dump alle Abonnements ich letzte Mal gelegt, beginnen wir gerade wieder'. Grundsätzlich ist es nicht die 'Werte' der Elemente, die geändert werden, müssen wir unsere Abonnements zu ersetzen, da gibt es mehr/weniger Objekte berücksichtigt werden.

Funktion OrderValueDeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): Dezimalzahlen;
var
CurrentOrderLine: OrderLine;
beginnen
Ergebnis: = 0;
für CurrentOrderLine im Self.OrderLines do
beginnen
Ergebnis: = Ergebnis + CurrentOrderLine.LineValue;
Abonnieren Sie den Member des aktuellen untergeordneten Objekts
CurrentOrderLine.AsIObject(). Eigenschaften ['LineValue']. SubscribeToValue(ReEvaluateSubscriber);

Ende;
Schließlich, wenn die Self.OrderLines-Liste in irgendeiner Weise geändert
Wir müssen alle unsere Abonnements Schrott und erneut starten.
Self.AsIObject(). Eigenschaften ['OrderLines']. SubscribeToValue(ReSubscribeSubscriber);
Ende;

Fazit
Hoffentlich ist dies ein Augenöffner, die Fähigkeiten der Code abgeleitete Mitglieder in ECO gewesen. Wenn Sie nicht getan haben bereits empfehle ich würde Rolf Lampas Artikel dynamische Navigation für höhere Leistung, es wurde geschrieben für kühn, aber die Prinzipien sind dieselben.









Neu zu bewerten oder erneut abonnieren?


Neu zu bewerten oder erneut abonnieren? : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Dieser Artikel soll erklären, abgeleiteten Mitglieder in ECO. Es ist Hauptzweck ist, die Differenz zwischen der ReEvaluateSubscriber und ReSubscribeSubscriber-Parameter, wenn Sie Member im Code ableiten zu beschreiben.

Eine der hervorragenden Eigenschaften von Fett, die um den Übergang über Öko machen haben ist abgeleiteten Member. Abgeleiteten Mitglied ist ein bisschen wie ein berechnetes Feld auf ein Dataset, außer es nur zum ersten Mal berechnet wird Sie seinen Wert und dann diesen Wert wird zwischengespeichert, um Verarbeitungszeit anfordern.

Nehmen Sie als Beispiel der Person FullName. Vollständiger Name würde wie folgt berechnet

Ergebnis: = Titel + ' ' + Vorname + '' + LastName;

Der erste wichtige Schritt zur Schaffung eines solchen Attributs in ECO wird das Attribut Derived markiert. Es ist tatsächlich möglich, geben einige 'Ableitung OCL' und haben das ECO-System alles für Sie ableiten

Titel + ' ' + Vorname + '' + LastName

aber dieser Artikel soll Ihnen zeigen, wie viel kompliziertere Szenarien zu behandeln.

Sie erwarten mit einem typischen DataSet berechnetes Feld die Methode berechnet werden, jedes Mal, wenn der Wert angefordert wird. Wenn das aktuelle Objekt als Liste in angezeigt wird einem dann das Aufrufen dieser Methode für jede Instanz jedes Mal neu, das DataGrid-Steuerelement zeichnet DataGrid kann CPU-intensiv, vor allem, wenn der Wert von vielen anderen Attribute/Objekten berechnet wird.

Eco, die die Methode zum ersten Mal ausgeführt wird der Wert angefordert wird, jedoch dann das Ergebnis wird zwischengespeichert werden automatisch in den ECO-Raum. Zukünftige Anforderungen für den Wert dieses abgeleiteten Members werden stattdessen den zwischengespeicherten Wert zurückgeben. Das Potenzial für CPU sparen hier liegt auf der Hand, vor allem mit komplizierten Routinen.

Eine Code-abgeleitete Methode für ein Mitglied hat einen bestimmten Namen + Parameterliste, ECO verwendet Reflektion, um die Methode zu finden. Die Struktur ist

Funktion < MemberName > DeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): < MemberType >;

in unserem Beispiel FullName erwarten ECO finden

Funktion FullNameDeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): string;

Das ist des Problems hier. Wenn der Wert des Elements abgeleitet wird nur einmal berechnet und dann zwischengespeichert, was geschieht, wenn der Wert der Titel, Vorname oder Nachname ändert?

Das ECO-Framework hat offensichtlich keine Ahnung, was wir getan haben, um den Wert dieses Members ableiten, noch welche Objekte/Member verwendet wurden, um es zu berechnen. Um sicherzustellen, dass ECO, den es muss wissen gibt, wann dieser Member neu berechnet werden, sollten, nie einen falschen Wert. In der Tat was es eigentlich wissen muss ist, wenn dieses Mitglied 'Ungültig' gekennzeichnet werden soll, wird nicht neu berechnet werden bis ihr Wert angefordert wird.

Das ECO-Framework verwendet eine Art Beobachter-Muster der relevanten Objekte/Mitglieder zu sehen, wann immer eine dieser werden verändert die EcoSpace wird markieren des abgeleiteten Members ungültig (Ableitung eines Mitglieds über 'Ableitung OCL' findet diese Abonnements automatisch). So sieht unser Code jetzt soetwas

Funktion FullNameDeriveAndSubscribe (ReEvaluateSubscriber, ReSubscribeSubscriber: ISubscriber): string;
beginnen
Ergebnis: = Titel + ' ' + Vorname + '' + LastName;
Jetzt sind wir Ort oder 'Abonnements'
Self.AsIObject(). Eigenschaften ['Title']. SubscribeToValue(ReEvaluateSubscriber);
Self.AsIObject(). Eigenschaften ['Vorname']. SubscribeToValue(ReEvaluateSubscriber);
Self.AsIObject(). Eigenschaften ['Nachname']. SubscribeToValue(ReEvaluateSubscriber);
Ende;

Die 'ReEvaluateSubscriber' ist ein Beobachter-Objekt, das uns von irgendwoher übergeben wird in das Innenleben des ECO Frameworks. Alles, was wir tun müssen, ist, um sicherzustellen, dass wir es für alle relevanten Objekte/Mitglieder abonnieren. Wann immer eines dieser abhängigen Elemente haben ihren Wert verändert, wird die ReEvaluateSubscriber ECO Rahmen sagen, dass der Wert der oder Mitglied 'nächste Mal, wenn es angefordert wird neu bewertet werden sollte'.

Neu zu bewerten oder erneut abonnieren?
Damit komme ich zum letzten Punkt. Es gibt zwei Abonnenten an unsere-Methode übergeben, 'ReEvaluateSubscriber' und 'ReSubscribeSubscriber', so was tut der anderen ein, und wann verwendet werden sollte?

Im vorherigen Beispiel verwendet wir die ReEvaluateSubscriber, da wir nur wissen, wann die Werte der Titel, Vorname oder Nachname ändern mussten. In ein komplizierteres Beispiel, was, das wir tun musst, kompliziert etwas mehr strukturell, wie jedes OrderLine ein PurchaseOrder durchlaufen und Mitglieder dieser verwandte Objekte stattdessen abonnieren.

In solchen Situationen was geschieht, wenn eine neue OrderLine hinzugefügt wird? Abonniert wir kann möglicherweise bereits ein Objekt nicht haben die noch bestanden hatte nicht an dem Punkt, dass wir unsere Abonnements gelegt? Was passiert, wenn ein OrderLine entfernt oder gelöscht wird?

Das ist genau das, was für die ReSubscribeSubscriber ist. Diese Abonnenten ausgelöst werden sollte, wann immer wir wollen sagen 'Dump alle Abonnements ich letzte Mal gelegt, beginnen wir gerade wieder'. Grundsätzlich ist es nicht die 'Werte' der Elemente, die geändert werden, müssen wir unsere Abonnements zu ersetzen, da gibt es mehr/weniger Objekte berücksichtigt werden.

Funktion OrderValueDeriveAndSubscribe(ReEvaluateSubscriber,
ReSubscribeSubscriber: ISubscriber): Dezimalzahlen;
var
CurrentOrderLine: OrderLine;
beginnen
Ergebnis: = 0;
für CurrentOrderLine im Self.OrderLines do
beginnen
Ergebnis: = Ergebnis + CurrentOrderLine.LineValue;
Abonnieren Sie den Member des aktuellen untergeordneten Objekts
CurrentOrderLine.AsIObject(). Eigenschaften ['LineValue']. SubscribeToValue(ReEvaluateSubscriber);

Ende;
Schließlich, wenn die Self.OrderLines-Liste in irgendeiner Weise geändert
Wir müssen alle unsere Abonnements Schrott und erneut starten.
Self.AsIObject(). Eigenschaften ['OrderLines']. SubscribeToValue(ReSubscribeSubscriber);
Ende;

Fazit
Hoffentlich ist dies ein Augenöffner, die Fähigkeiten der Code abgeleitete Mitglieder in ECO gewesen. Wenn Sie nicht getan haben bereits empfehle ich würde Rolf Lampas Artikel dynamische Navigation für höhere Leistung, es wurde geschrieben für kühn, aber die Prinzipien sind dieselben.


Neu zu bewerten oder erneut abonnieren?

Neu zu bewerten oder erneut abonnieren? : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Neu zu bewerten oder erneut abonnieren?
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung