保持控制器薄(太多的操作方法)

时间:2010-09-28 13:14:01

标签: asp.net-mvc asp.net-mvc-controller actionmethod

我正在开发我的第一个真正的ASP.NET MVC项目,我注意到我一直在工作的控制器变得相当大。这似乎违背了保持控制器薄的最佳做法。

我已经做好了将业务逻辑从控制器中删除的工作。我为此使用了一个单独的层。每个操作主要调用业务层中的方法,并根据模型状态是否有效来协调最终结果。

也就是说,控制器有很多动作方法。直觉上,我想将控制器分解为子控制器,但我没有看到一个简单的方法。我可以简单地将控制器分解为单独的控制器,但是我松开了层次结构,感觉有点脏。

是否有必要使用大量精简操作重构控制器?如果是这样,最好的方法是什么?

3 个答案:

答案 0 :(得分:17)

首先,当您听到将控制器代码保持在最低限度时,这主要是指保持每个操作方法尽可能薄(将逻辑放入业务类,到视图和ViewModels。)看来你正在这样做,这很棒。

对于“太多”动作方法,这是一个判断调用。它实际上可能是一个良好组织的标志,你将每个行动都集中在一件事上。另外,也许您正在使用专门用于RenderAction的操作?并且,您的解决方案的本质可能只是与Controller的主题有关的许多事情。

所以,我的猜测是你可能没事。但是,为了确保在便条纸上将控制器分成两个或三个控制器,并勾勒出你的故事如何从行动转变为行动。如果您发现您的工作流程适用于更多控制器,您应该将其分解。特别是如果您稍后要添加此功能。越早打破就越好。

答案 1 :(得分:3)

好问题。

我认为“瘦”控制器可能仍然需要“宽”或“高”,这取决于你想要如何扩展类比。如果没有干净的方法来分解需要做很多事情的控制器,只要每个Action都专注于准备Views / ViewModel并且代码大小有限,我认为这不是问题。

答案 2 :(得分:2)

您拥有的另一个结构选项是为操作的逻辑分组引入部分类。并使用vscommands之类的东西将文件组合在一起。

我怀疑任何人都可以提出一些神奇的行动来告诉你什么时候打破并引入新的控制器是一个好主意,这实际上取决于你的域名。