Quelles sont les meilleures pratiques pour orchestrer l'interaction entre des composants complexes présents dans votre vue? Je ne parle pas de simples widgets comme une zone de liste déroulante ou un contrôle de grille, mais de composants qui sont constitués de plusieurs widgets et qui peuvent mériter d'être testés individuellement.Communication intercomposant dans une vue (MVC)
Souhaitez-vous:
- Définir les interfaces abstraites pour chaque composant,
laisser le contrôleurles raccorder par injection de dépendance pour les laisser parler directement entre eux par des appels de méthode? Les composants sont donc conscients des interfaces des autres composants. - Définir les événements que chaque composant peut déclencher et
permettent au contrôleurde les connecter directement via des écouteurs d'événement les uns aux autres? Les composants ont donc des gestionnaires d'événements attachés aux récepteurs d'événements d'autres composants. - Définir des interfaces abstraites pour chaque composant, définir les événements qu'elles peuvent déclencher et
laisser le contrôleurécouter sur tous les événements et effectuer des appels de méthode sur les interfaces? Les composants sont donc complètement agnostiques vis-à-vis des autres composants. - Une application classique du modèle Observer?
- Autre chose?
Mise à jour: J'ai coup sur « laisser le contrôleur ... » de # 1-3 parce qu'il est pas nécessairement le contrôleur qui doit faire le routage/orchestration dans ces cas. Ce pourrait être la vue elle-même.
J'ai adopté la méthode # 3 dans un projet récent et j'étais content du découplage et de la testabilité individuelle des composants. Cependant, j'ai le sentiment que je pourrais rationaliser le câblage des composants. Dans mon cas, l'objet View principal doit ajouter plusieurs écouteurs d'événement sur chaque composant, puis appeler des méthodes sur les composants appropriés, après avoir parfois effectué un traitement local (comme parler avec le modèle). Le code pour ajouter les gestionnaires d'événements semble un peu brouillon et je suis particulièrement à la recherche d'un moyen propre de le faire.