Ich arbeite in einem Javascript + Backbone.js (eine MVC-Framework) + RequireJS Rahmen, aber diese Frage ist etwas OO generisch.Dependency Injection vs. Managed Abhängigkeiten vs. globales Objekt
mich mit der Erklärung, dass in Backbone Lassen Sie beginnen, sind Ihre Ansichten eine Mischung aus traditionellen Ansichten und Controller und Ihre HTML-Templates sind die traditionellen MVC Ansichten
worden meinen Kopf über diese für eine Weile Abstich und ich bin nicht sicher, was der richtige/pragmatische Ansatz sein sollte.
Ich habe ein User-Objekt, die Benutzereinstellungen enthält (wie Einheitensystem, Sprachauswahl, etwas anderes), dass eine Menge Code abhängt.
Einige meiner Ansichten machen die meiste Arbeit ohne die Verwendung von Templates (durch die Verwendung von 3rd-Party-Bibliotheken wie Mapping und Graphing-Bibliotheken) und als solche haben sie eine Abhängigkeit vom User-Objekt, um die Konvertierung der Einheiten zu kümmern. beispielsweise. Ich verwende derzeit RequireJS, um diese Abhängigkeit zu verwalten, ohne die Kapselung zu stark zu unterbrechen.
Einige meiner Ansichten arbeiten selbst sehr wenig und geben nur Modelldaten an meine Vorlagen/Vorlagen weiter, die die Arbeit erledigen und auch wieder eine Abhängigkeit vom Benutzerobjekt haben, etwa bei der Einheitenumrechnung. Die einzige Möglichkeit, diese Abhängigkeit in die Vorlage zu übertragen, besteht darin, sie in das Modell einzufügen und das Modell in die Vorlagenmaschine zu übergeben.
Meine Frage ist, wie man am besten handhaben, eine solche weit benötigt Abhängigkeit? - Erstellen Sie eine App-weite Referenz/globales Objekt, das überall zugänglich ist? (Igitt) - Verwenden Sie RequireJS Abhängigkeiten verwaltet werden, obwohl ist es in der Regel nur verwaltete Abhängigkeit Laden für Klassen-/Objektdefinitionen verwenden empfohlen, anstatt konkrete Objekte. - Oder verwenden Sie immer nur Abhängigkeitsinjektion und übergeben Sie diese Abhängigkeit manuell in alles, was sie benötigt?
Für das, was es wert ist, können Sie einige gute Muster finden, um dieses Problem zu mildern, indem Sie defereds verwenden, um vor austauschbaren globalen Variablen zu sitzen, die möglicherweise asynchron geändert werden –