Design: Lazy Loading?



  • Abend!

    Ich habe eine Designfrage: Ich habe eine Klasse, die eine relativ teure Berechnungsmethode hat und die Ergebnisse in internen Datenstrukturen speichert. Von dieser Klasse habe ich immer recht viele Objekte (um die 1000).
    In manchen Programmläufen will ich diese Berechnung ausführen, in anderen niemals (kommt auf die Programm Argumente an).

    Momentan sieht meine Struktur in etwa so aus (Pseudo Code)

    if(computationRequired)
       foreach Object* o in objects
          o->computeExpensiveStuff();
    
       ... viel weiterer Code
       Object* o = getObject();
       vector<Result> v = o->getResultFromExpensiveComputation();
    

    Ich rufe also in einer Schleife für alle Objekte die teure Berechnungsmethode auf und später hole ich mir dann die Berechnungsergebnisse.
    Jetzt dachte ich daran das in Lazy Loading zu ändern. Sprich mit einem bool flag und wenn getResultFromExpensiveComputation() das erste Mal aufgerufen wird, dann stoße ich die teure Berechnung automatisch an.
    Wäre der Lazy Loading Ansatz schöner?



  • akkar schrieb:

    Wäre der Lazy Loading Ansatz schöner?

    Das kannst nur du entscheiden.

    Eine Schleife, die die Berechnung ausführt, könnte man möglicherweise parallelisieren.



  • Bei Lazy Evaluation verlierst du wie manni66 schon geschrieben hat die Möglichkeit die Berechnungen relativ einfach zu parallelisieren.
    Und du verlierst die Möglichkeit z.B. dem User anzuzeigen dass jetzt die Berechnungen gemacht werden, vielleicht sogar inklusive Progressbar.

    Dafür ist bei Lazy Evaluation automatisch sichergestellt dass du nur das berechnest was auch berechnet werden muss.

    Was schwerer wiegt musst du anhand deines speziellen Programms beurteilen.


Anmelden zum Antworten