¿Cuáles son algunas de las mejores prácticas para orquestar la interacción entre los componentes complejos que se encuentran en su vista?Comunicación de componentes cruzados dentro de una vista (MVC)
No estoy hablando de widgets simples como un cuadro combinado o un control de la cuadrícula, pero los componentes que se componen de múltiples widgets y que pueden merecer que se prueben por sí solos.
¿Quieres que:
- Definir interfaces abstractas para cada componente,
dejar que el controladorconectarlos a través de la inyección de dependencia a dejarlos hablar directamente entre sí a través de llamadas a métodos? Por lo tanto, los componentes conocen las interfaces de otros componentes. - Defina los eventos que cada componente puede disparar y
deje que el controladorlos conecte directamente a través de los detectores de eventos el uno al otro? Por lo tanto, los componentes tienen controladores de eventos conectados a los receptores de eventos de otros componentes. - Defina las interfaces abstractas para cada componente, defina los eventos que pueden disparar y
deje que el controladorescuche todos los eventos y realice llamadas a los métodos en las interfaces. Por lo tanto, los componentes son completamente independientes de otros componentes. - ¿Una aplicación clásica del patrón Observer?
- ¿Algo más?
Actualización: he derrame cerebral a cabo "dejar que el controlador ..." de # 1-3, porque no es necesariamente el controlador que tiene que hacer el enrutamiento/orquestación en esos casos. Podría ser la Vista en sí misma.
He adoptado el método n. ° 3 en un proyecto reciente y estoy contento con el desacoplamiento y la capacidad de prueba individual de los componentes. Sin embargo, tengo la sensación de que podría simplificar el cableado de los componentes. En mi caso, el objeto View principal tiene que agregar múltiples detectores de eventos en cada componente y luego llamar a los métodos sobre los componentes apropiados, después de algunas veces hacer algún procesamiento local (como hablar con el Modelo). El código para agregar los controladores de eventos parece un poco desordenado y particularmente estoy buscando una manera limpia de hacerlo.