gpt4 book ai didi

asp.net-mvc - 上帝 Controller - 如何防止它们?

转载 作者:行者123 更新时间:2023-12-03 20:40:41 29 4
gpt4 key购买 nike

在我一直从事的一些 MVC 项目中,很明显有一些有问题的 Controller 已经有机地成长为上帝类——如果你愿意的话,每个半神都在自己的领域中。

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

在一个项目中,我们有一个 NutritionController。随着时间的推移,它逐渐包含了这些操作(许多都有各自的 GET、POST 和 DELETE 方法):

Index (home controller)
ViewFoodItem
AddFoodItem
EditFoodItem
DeleteFoodItem
ViewNutritionSummary
SearchFoodItem
AddToFavorites
RemoveFromFavorites
ViewFavorites


然后我们有一个 ExerciseController,它将包含许多类似的操作,例如搜索和收藏操作。是否应该将这些重构为它们自己的 Controller ,使其成为类似的东西?
SearchController {
SearchExercise
SearchNutrition
//... etc
}

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

在我看来,如果您将它们分解为单独的 Controller ,您将在某种程度上增加一个难以置信的大依赖来处理您需要的信息。或者,您将拥有一个完全通用的处理应用程序,该应用程序将非常难以处理,因为您必须跳过这么多圈才能获得所需的效果(在 M、V 或 C 级别)。

我在想这个错误的方式?例如,我是否应该有一个通用的收藏夹对象,然后让 Controller 决定将它扔到哪个 View ?

*抱歉拼出首字母缩略词 - 我这样做是为了以防其他人遇到这个问题并且对这些东西是什么一无所知

编辑:
我执行的所有逻辑都在服务层中处理。例如, Controller 会将"new"FoodItem 发送到服务。如果它已经存在,或者它有错误,该服务会将它冒泡回 Controller 。

最佳答案

我会根据责任分解你的第一个 list :

首页 Controller

  • 索引

  • FoodItemController
  • 查看食品
  • 添加食品
  • EditFoodItem
  • 删除食品项
  • 搜索食品

  • 营养师
  • 查看营养总结

  • 收藏 Controller
  • 加入收藏
  • 从收藏夹中删除
  • 查看收藏
  • 搜索收藏

  • Django的 MVC 方法是将职责分离到“应用程序”中,每个应用程序都有自己的模型、 Controller ,甚至在必要时使用模板。你很可能会有一个食品应用程序、一个营养应用程序、一个搜索应用程序和一个收藏夹应用程序。

    编辑:OP提到搜索对每个 Controller 都更具体,所以我做了这些 Action 。然而,搜索也可能只是一个通用的全局事物,所以在这些情况下,一个 SearchController 就可以了。

    关于asp.net-mvc - 上帝 Controller - 如何防止它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1024227/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com