私が取り組んできたいくつかのMVCプロジェクトでは、神のクラスに有機的に成長した問題のあるコントローラーがいくつかあることが明らかになりました。
この質問は「何がどこに行くのか」という問題かもしれませんが、SRP(単一責任原則)、DRY(Do n't Repeat Yourself)、および物事を簡潔に「アジャイル」に保つことに関して重要な質問だと思います。そして、私はこれについて精通するのに十分な経験がありません(このパターンと一般的な設計で)。
1つのプロジェクトには、NutritionControllerがあります。時間の経過とともに、これらのアクション(多くはそれぞれのGET、POST、およびDELETEメソッドを含む)を含むようになりました。
Index (home controller) ViewFoodItem AddFoodItem EditFoodItem DeleteFoodItem ViewNutritionSummary SearchFoodItem AddToFavorites RemoveFromFavorites ViewFavorites
次に、ExerciseControllerがあります。これには、検索やお気に入りのアクションなど、多くの同様のアクションが含まれます。これらを独自のコントローラーにリファクタリングして、そのようなものにする必要がありますか?
SearchController {
SearchExercise
SearchNutrition
//... etc
}
FavoritesController {
ViewNutritionFavorites
AddToNutritionFavorites
AddToExerciseFavorites
EditNutritionFavorites
EditExerciseFavorites
//... etc
}
それらを別々のコントローラーに分割すると、必要な情報を処理するために、あるレベルで信じられないほど大きな依存関係が大きくなるように思われます。または、(M、V、またはCレベルのいずれかで)目的の効果を得るには非常に多くのフープをジャンプする必要があるため、処理が非常に難しい完全に汎用的な処理アプリケーションを使用することになります。
私はこれを間違った方法で考えていますか?たとえば、一般的なお気に入りオブジェクトを作成してから、それをスローするビューをコントローラーに決定させる必要がありますか?
*頭字語を綴って申し訳ありません-他の誰かがこの質問に出くわし、それらが何であるかについて無知な場合に備えて、私はそうしています
編集: 私が実行するすべてのロジックは、ほとんどサービスレイヤーで処理されます。たとえば、コントローラーは「新しい」FoodItemをサービスに送信します。すでに存在する場合、またはエラーがある場合、サービスはそれをコントローラーにバブルバックします。