asp.net-mvc – 神控制器 – 如何防止它们?

在我一直在研究的几个MVC项目中,显而易见的是,有一些问题的控制器已经有机地成长为上帝阶级,每个人都在自己的领域,如果你愿意的话.

这个问题可能更多的是“什么在哪里”,但我认为这是一个重要的问题,关于SRP(单一责任原则),DRY(不要重复自己),并保持简洁,“敏捷” – 我没有足够的经验(用这种模式和一般设计)来了解这个.

一个项目中,我们有一个NutritionController.随着时间的推移,它已经成长为包括这些动作(许多与他们各自的GET,POST和DELETE方法):

06000

然后我们有一个ExerciseController,它将包含许多类似的操作,例如搜索和收藏夹操作.这些是否应该重构到自己的控制器中,这样就是这样?

SearchController {
    SearchExercise
    SearchNutrition
    //... etc
}

FavoritesController {
    ViewNutritionFavorites
    AddToNutritionFavorites
    AddToExerciseFavorites
    EditNutritionFavorites
    EditExerciseFavorites
    //... etc
}

在我看来,如果你把它们分成不同的控制器,你将会在某种程度上增加一个令人难以置信的大型依赖,来处理你需要的信息.或者你将有一个完全通用的处理应用程序,这将非常难以处理,因为你将不得不跳过这么多的圈,以获得你想要的效果(在M,V或C级别).

我在想这个错误的方式?例如,我应该有一个通用的“收藏夹”对象,然后让控制器决定要将其抛出的视图?

*对不起拼写出首字母缩略词 – 我正在这样做,以防其他人遇到这个问题,这些东西是无知的

编辑:
我所执行的所有逻辑在服务层中几乎处理得很好.例如,控制器将向服务发送“新”FoodItem.如果它已经存在,或者它有一个错误,那么服务将会使其回到控制器.

解决方法

我会根据责任打破你的第一个列表:

HomeController的

>索引

FoodItemController

> ViewFoodItem
> AddFoodItem
> EditFoodItem
> DeleteFoodItem
> SearchFoodItem

NutritionController

> ViewNutritionSummary

FavoritesController

> AddToFavorites
> RemoveFromFavorites
> ViewFavorites
>搜索收藏

Django的MVC方法是将责任分为“应用程序”,每个应用程序都有自己的型号,控制器,甚至必要的模板.您最喜欢的应用是食品应用,营养应用,搜索应用和收藏应用.

编辑:OP提到搜索对每个控制器更具体,所以我做了这些动作.然而,搜索也可能只是一般的全局事物,所以在这些情况下,SearchController会很好.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...