在我一直从事的一些 MVC 项目中,很明显有一些有问题的控制器已经有机地成长为上帝类——如果你愿意的话,每个半神都在自己的领域中。
这个问题可能更像是“什么去哪里”,但我认为这是一个关于 SRP(单一责任原则)、DRY(不要重复自己)和保持简洁、“敏捷”的重要问题——而且我没有足够的经验(使用这种模式和一般设计)来了解这一点。
在一个项目中,我们有一个 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 发送到服务。如果它已经存在,或者它有错误,该服务会将它冒泡回控制器。