我正在学习MVC并且无法决定何时应该创建新控制器,而只是添加与现有控制器关联的操作和视图。一方面,单一责任似乎表示控制器应限于少数几个动作。但是,当我尝试这个时,类的数量呈指数级增长(每个类型的模型,视图和控制器) - 我想知道我是否会过火。
例如,默认AccountController具有Login,ChangePassword和Register操作。我倾向于创建一个LoginController,PasswordController和ProfileController,以及相关的模型类。那么有1个班级,那里会有3-6个班级。
这有什么好的经验法则吗?
答案 0 :(得分:9)
您应该为您正在操作的每种模型类型专门设置一个控制器。控制器充当对这些模型起作用的动作集合。这通常是经验法则,但有时控制器的范围超越了单个模型。
AccountController处理与身份验证相关的所有事情。这是一个超越单个模型范围的示例,通常包含身份验证。身份验证的关键部分是什么?检索用户,更改密码等
答案 1 :(得分:6)
我认为你需要务实。我正在开发一个由StatsController组成的项目。行动的数量不断增长(RandomStat,MostPopular,MostViewed,MostVoted等等),这个列表不断增加。这些操作很容易满足,因为StatsController的依赖关系不会改变。我正在使用IoC来满足控制器的需求,当我开始看到我的控制器需要引用新对象时,这是一个需要拆分的信号。
如果您的LoginController,PasswordController和ProfileController都依赖于相同的对象,为什么要将它们分开?
答案 2 :(得分:0)
我当前的AccountController有12种方法对我来说是完全可管理的。
我有另一个控制器,目前有34个方法,但这些控制器都绑定到一个视图,每个控制器最多有8到10行代码(检查所需参数,更新模型,并根据需要重定向)。
他们的关键是将业务逻辑封装在一个完全独立的模块中。这将使您的操作处理程序保持极轻的重量,并可以更轻松地测试您的业务逻辑。