De nombreuses applications Android incluent leur propre classe BaseActivity, que toutes les activités dans l'application étendent. Cela est utile car cela donne un endroit central pour mettre en place des fonctionnalités communes à la plupart/toutes les activités. Le principal inconvénient d'avoir une BaseActivity est que vous ne pouvez alors pas utiliser les sous-classes d'Activity (ListActivity, etc.).
Une alternative est d'avoir un ActivityDelegate. Cela donne un endroit central pour les fonctionnalités tout en vous permettant d'utiliser les sous-classes d'Activity. C'est aussi vraisemblablement plus testable, car cela utilise la composition plutôt que l'héritage.
Ces deux solutions peuvent potentiellement conduire à beaucoup de code spaghetti lorsque BaseActivity/ActivityDelegate devient trop grand et complexe. Une solution possible à cela est d'utiliser le modèle de délégué, mais de diviser les fonctionnalités en plusieurs délégués différents. Cela réduit le code spaghetti dans les délégués, mais les activités deviennent alors plus compliquées - elles essaient maintenant de faire avancer leurs méthodes on* vers de nombreux délégués différents au lieu d'un seul.
Une solution possible à tous ces problèmes est d'utiliser un Gestionnaire de Délégués. Le Gestionnaire de Délégués garde une trace de tous les petits délégués dans l'application. Les activités font avancer leurs méthodes on* vers le Gestionnaire de Délégués, qui les transmet à tous les délégués individuels. Cela accomplit tout ce qui suit:
- Élimination du code en double - toutes les fonctionnalités communes sont placées dans l'un des délégués
- Permet l'utilisation des sous-classes d'Activity
- Code simple dans toutes les activités - toutes les méthodes on * sont avancées vers une seule classe
- Facilement testable - il est simple de simuler tout ce qui entoure les délégués et le gestionnaire de délégués pour les tests unitaires
Quelqu'un a-t-il déjà essayé d'utiliser ce schéma auparavant? Si c'est le cas, comment cela s'est-il passé?