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 methods
和JavaScript
是路由器吗?我的目标是可维护的代码——随着功能越来越多,我开始滑下那个滑坡......
【问题讨论】:
【参考方案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:结构化控制器的主要内容,如果未能解决你的问题,请参考以下文章