Problema
Recientemente leí mucho sobre Singletons como malo y cómo la inyección de dependencia (que entiendo como "usar interfaces") es mejor. Cuando implementé parte de esto con devoluciones de llamada / interfaces / DI y adhiriéndome al principio de segregación de interfaz, terminé con un gran lío.
Las dependencias de un UI padre donde básicamente se combinaban todas las de sus hijos, por lo que cuanto más arriba estaba la jerarquía de un elemento de UI, más hinchado estaba su constructor.
En la parte superior de la jerarquía de la interfaz de usuario había una clase de aplicación, que contenía la información sobre la selección actual y una referencia a un modelo 3D que debe reflejar los cambios. ¡La clase de aplicación estaba implementando 8 interfaces, y esto fue solo alrededor de una quinta parte de los productos (/ interfaces) por venir!
Actualmente trabajo con un singleton que contiene la selección actual y los elementos de la interfaz de usuario que tienen una función para actualizarse. Esta función desliza hacia abajo el árbol de la interfaz de usuario y los elementos de la interfaz de usuario y luego accede al singleton de selección actual según sea necesario. El código me parece más limpio de esta manera.
Pregunta
¿Un singleton puede ser apropiado para este proyecto?
Si no, ¿hay una falla fundamental en mi pensamiento y / o implementación de DI que lo hace tan engorroso?
Información adicional sobre el proyecto
Tipo: Canasta de compras para apartamentos, con campanas y silbatos
Tamaño: 2 meses-hombre para código y
mantenimiento de la interfaz de usuario : No hay actualizaciones en ejecución, pero tal vez "versión 2.0" posterior
Entorno: Uso de C # en Unity, que usa una Entidad Sistema de componentes
En casi todos los casos, la interacción del usuario desencadena varias acciones. Por ejemplo, cuando el usuario selecciona un elemento
- la parte de la interfaz de usuario que muestra ese elemento y su descripción debe actualizarse. Para esto, también necesita obtener información de un modelo 3D para calcular el precio.
- más arriba en la interfaz de usuario, el precio total general debe actualizarse
- Es necesario invocar una función correspondiente en una clase en un modelo 3D para mostrar los cambios allí.