Estoy trabajando dentro de un JavaScript + BackboneJS (un framework MVC) + RequireJS framework, pero esta pregunta es algo OO genérica.Dependencia de inyección frente a dependencias administradas frente al objeto global
Empezaré explicando que en la espina dorsal, sus vistas son una mezcla de vistas y controladores tradicionales, y sus plantillas HTML son los tradicionales Vistas MVC
estado devanando mi cabeza en esto por un tiempo y estoy no estoy seguro de cuál debería ser el enfoque correcto/pragmático.
Tengo un objeto Usuario que contiene las preferencias del usuario (como sistema de unidad, selección de idioma, cualquier otra cosa) de las que depende mucho el código.
Algunas de mis vistas hacen la mayor parte del trabajo sin el uso de plantillas (usando librerías de terceros, como Mapping y Graphing libs), y como tales tienen una dependencia en el objeto User para encargarse de la conversión de la unidad. por ejemplo. Actualmente estoy usando RequireJS para administrar esa dependencia sin romper demasiado la encapsulación.
Algunas de mis vistas trabajan muy poco ellas mismas, y solo transfieren datos de modelo a mi motor de plantillas/plantillas, que hacen el trabajo y también tienen una dependencia en el objeto Usuario, para cosas como la conversión de unidades. La única forma de pasar esta dependencia a la plantilla es inyectándola en el Modelo y pasando el modelo al motor de la plantilla.
Mi pregunta es, ¿cómo manejar mejor una dependencia tan necesaria? - ¿Cree una referencia de toda la aplicación/objeto global que esté accesible en todas partes? (YUK) - Use las dependencias gestionadas RequireJS, aunque generalmente solo se recomienda utilizar la carga de dependencias gestionadas para definiciones de clase/objeto en lugar de objetos concretos. - O, ¿solo utiliza la inyección de dependencia y pasa manualmente esa dependencia a todo lo que la necesita?
Por lo que vale, puedes encontrar algunos patrones geniales para mitigar este problema mediante el uso de diferidos para sentarte frente a variables globales conmutables que podrían modificarse de forma asíncrona. –