Parfois, les fonctions d'action dans la classe de contrôleur peuvent devenir énormes et désagréables, avec de nombreuses lignes de code pour contrôler simplement le flux de données du modèle à la vue. À un moment donné, ces énormes fonctions perdent complètement la trace des principes de base du bon code, c'est-à-dire seulement faire une chose, étant petite, lisible et gérable, etc.
Serait-il considéré comme une bonne pratique de briser ces énormes fonctions d'action dans des fonctions privées plus petites de la classe de contrôleur ou si la nécessité d'une telle optimisation signifie que nous devrions plutôt les ajouter dans le modèle?
Je voterais pour avoir les plus petites fonctions que privées dans le contrôleur afin qu'elles soient relatives à l'action, mais j'ai entendu des arguments que le contrôleur devrait de préférence être simple, tandis que le modèle peut devenir énorme et grumeleux; et je me demandais simplement lequel serait la méthode la plus préférée.
La meilleure réponse que je puisse donner est de citer le grand livre de Robert Martin, "Clean Code" que je recommande vivement à quiconque intéressé par le sujet:
La première règle de fonctions est qu'elles devraient être petites. La deuxième règle est qu'elles devraient être plus petites que cela.
Je ne peux pas le dire mieux. Une autre grande citation du même livre s'applique:
Les fonctions doivent faire une chose. Ils devraient bien faire bien. Ils devraient le faire seulement.
Lorsque vous divisez votre code dans plus de fonctions, vous êtes obligé de donner à ces fonctions noms significatifs pouvant améliorer considérablement la lisibilité de votre code. Inutile de dire que toutes les fonctions non destinées à être utilisées en dehors de la classe doivent être privées, vous pouvez donc réutiliser facilement votre code via héritage.
Si votre contrôleur a maintenant trop de fonctions, c'est un signe que cela fait probablement trop. Ensuite, vous pouvez le diviser en plusieurs morceaux indépendants ou essayer de déplacer certaines fonctions aux modèles comme mentionné dans l'autre réponse. De plus, si vous suivez une saveur MVC non classique, où les vues sont autorisées à avoir une certaine logique, vous pouvez mettre certaines de vos fonctions là-bas chaque fois qu'il convient.