ASP.NET MVC:结构化控制器

Posted

技术标签:

【中文标题】ASP.NET MVC:结构化控制器【英文标题】:ASP.NET MVC: Structuring Controllers 【发布时间】:2010-09-07 08:43:33 【问题描述】:

所以我开始了一个ASP.NET MVC 项目,虽然总体上体验很好,但我对我的控制器变得一团糟并不太满意。我在网上环顾四周(CodeCampServer 等),它们似乎都遇到了同样的问题,其中控制器方法非常一致地违反了 SRP(单一责任原则)——例如,如果请求是,控制器方法只会呈现视图GET,但如果是 POST,则更新 model。现在我有控制器方法负责整个应用程序中的多个逻辑路由 - 比如说它检查在表单上单击了哪个 button 并采取相应的行动。我可以使用 javascript 将每个按钮单击重定向到不同的表单操作,但那里也感觉不对劲......另一个大问题是魔法的扩散strings - ViewData["foo"] = blah; 长话短说,你们structure你的controller 逻辑?每个视图一个巨大的模型对象?很多小controller methodsJavaScript 是路由器吗?我的目标是可维护的代码——随着功能越来越多,我开始滑下那个滑坡......

【问题讨论】:

【参考方案1】:

ASP.NET 预览版 5(在 CodePlex 上可用)对此有一个答案:[AcceptVerbs] 属性。 Phil Haack 有一个blog post 讨论如何使用它。

至于视图数据魔术键问题,这是一个有趣的问题。如果您将视图视为一堆半独立的组件(尤其是考虑到新的局部视图支持),那么制作强类型模型就变得不太理想了,因为视图的几个部分应该相对独立彼此。

【讨论】:

【参考方案2】:

不同的人如何处理这个问题?我知道我只是花了几个小时查看模型文件夹中的混乱。我发现创建文件夹有助于减少视觉混乱,使用匹配的命名空间也有很大帮助。

但我的控制器目前是单体。问题是我一直专注于学习项目中的这一点(还有很多东西需要整理)。

我现在对 MVC 有了很好的了解,所以是时候回顾一下复杂性并考虑将控制器修改为命名更好、更简洁的函数了。

其他人是否将他们的控制器分解为子控制器? (如果有这种事)

【讨论】:

对控制器进行编码的诀窍是查看它们并说“如果每个操作方法超过 20 或 30 行或一些相对较小的行数,我该如何减少它?”,基本上,保持它 DRY 并重新考虑你在做什么,并将该逻辑移动到一些适当的 SERVICE 层,可以重用。 另外,下载 ROB CONERY 的 StoreFront MVC Starter Kit,看看他是如何分层解决方案的 -> 非常棒。 (谷歌它,我懒得在这么晚(早?!)早上找到链接......hth!

以上是关于ASP.NET MVC:结构化控制器的主要内容,如果未能解决你的问题,请参考以下文章

转007.ASP.NET MVC控制器依赖注入

ASP.NET MVC

理解ASP.NET MVC

ASP.NET MVC教程五:ASP.NET MVC中的路由

个人总结ASP.NET必备面试题

[ASP.net]MVC 在我的控制器之前做啥?