Avec Observers officiellement retiré de Rails 4.0 , je suis curieux de savoir ce que les autres développeurs utilisent à leur place. (Autre que l'utilisation de la gemme extraite.) Alors que les observateurs étaient certainement maltraités et pouvaient facilement devenir parfois difficiles à manier, il y avait de nombreux cas d'utilisation en dehors du simple effacement de cache où ils étaient bénéfiques.
Prenons, par exemple, une application qui doit suivre les modifications d'un modèle. Un observateur pourrait facilement surveiller les changements sur le modèle A et enregistrer ces changements avec le modèle B dans la base de données. Si vous souhaitez surveiller les changements sur plusieurs modèles, un seul observateur peut gérer cela.
Dans Rails 4, je suis curieux de savoir quelles stratégies les autres développeurs utilisent à la place des observateurs pour recréer cette fonctionnalité.
Personnellement, je penche vers une sorte d'implémentation de "gros contrôleur", où ces changements sont suivis dans la méthode de création / mise à jour / suppression de chaque contrôleur de modèles. Bien que cela gonfle légèrement le comportement de chaque contrôleur, cela aide à la lisibilité et à la compréhension car tout le code est au même endroit. L'inconvénient est qu'il existe maintenant un code très similaire dispersé dans plusieurs contrôleurs. Extraire ce code dans des méthodes d'assistance est une option, mais il vous reste toujours des appels à ces méthodes éparpillés partout. Pas la fin du monde, mais pas tout à fait dans l'esprit des "maigres contrôleurs" non plus.
Les rappels ActiveRecord sont une autre option possible, bien que je n'aime pas personnellement car elle a tendance à coupler deux modèles différents trop étroitement à mon avis.
Donc, dans le monde Rails 4, sans observateurs, si vous deviez créer un nouvel enregistrement après qu'un autre enregistrement a été créé / mis à jour / détruit, quel modèle de conception utiliseriez-vous? De gros contrôleurs, des rappels ActiveRecord ou autre chose?
Je vous remercie.