ASP.NET MVC: 控制器的结构化

10

我正在进行一个ASP.NET MVC项目,总体来说体验不错,但是我的控制器变得混乱不堪。我在网上查找(CodeCampServer等)发现它们都存在同样的问题,即控制器方法经常违反SRP(单一职责原则),比如仅当请求为GET时渲染视图,但如果是POST则更新模型。现在我的控制器方法负责应用程序中多个逻辑路由 - 比如检查表单上点击了哪个button 并根据相应的情况进行操作。我可以使用JavaScript将每个按钮点击重定向到不同的表单操作,但是感觉不太对劲... 另一个大问题是过多地出现魔术字符串 - ViewData ["foo"] = blah; 长话短说,你们如何组织你们的控制器逻辑?每个视图一个大型模型对象?很多小的控制器方法而JavaScript作为路由器?我的目标是可维护的代码 - 随着功能不断增加,我开始滑下这条悬崖...

2个回答

9
ASP.NET Preview 5(可以在CodePlex上获取)有一个解决方案:[AcceptVerbs]属性。 Phil Haack 博客帖子中讨论了它的用法。关于视图数据魔术键问题,这是一个有趣的问题。如果您将视图视为一组半独立组件(特别是考虑到新的部分视图支持),那么创建强类型模型就不那么理想,因为视图的几个部分应该相对独立。

0

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

但我的控制器目前还是单体结构。问题在于我一直专注于学习项目(还有很多需要解决的问题)。

我现在对MVC有了很好的掌握,所以是时候审查复杂性并考虑将控制器修改为更好命名和更清晰的函数。

其他人是否将他们的控制器分成子控制器?(如果有这样的东西)


编写控制器的技巧是看着它们并说:“如果每个操作方法超过20或30行或某个相对较小的数字,我该如何减少它?”基本上,保持DRY(不要重复自己)并重新思考你正在做的事情,并将那些逻辑移动到一些适当的SERVICE层中,以便可以重用。 - Pure.Krome
此外,下载 ROB CONERY 的 StoreFront MVC Starter Kit 并查看他如何构建解决方案 - 非常好用。 (谷歌一下就行,我太懒了,这个时间(早?!)我不想找链接...希望对你有所帮助!) - Pure.Krome

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接