model-view-controller - 避免在 MVC 中使用大型 Controller

标签 model-view-controller controllers action

当 Controller 包含大量操作时,它们可能会变得庞大且笨重。这在现实世界的使用中是一个重大问题吗?如果是的话,有什么策略可以缓解它(或者只需减少每个 Controller 的操作计数就足够了)?

我可以想象 Controller 将逻辑卸载到其他类型的操作实现,并根据一些有意义的启发式进行分组。

最佳答案

根据我的经验,这种情况主要发生在我没有足够积极地使用“REST”刀时。有时,隐喻与我们思考问题的方式不一致;例如,很容易认为“登录”是对“帐户”的操作,但是如果您应用 REST 刀,您会意识到登录实际上是“开始一个新 session ”,并且您通过应用“新 session ”来颠倒这个想法SessionController 上的“(或创建)操作。然后你有一个小 Controller 负责创建和销毁 session (登录和注销)。

我确信有些人不喜欢用困惑的身份验证概念来混淆 REST 的水域,所以让我们看一个更明显的例子。我可以有一个 BlogPost 实体,它可以有一堆评论。我没有在 BlogPostController 上使用 AddComment 操作,而是在 BlogPost 上使用通常的创建/编辑/删除方法,以及另一个 Controller CommentController,其新/创建操作需要 BlogPostId,并实现创建/编辑/删除方法。

我遇到过一些需要非 REST 类操作的情况,例如“从 CSV 文件导入 X 的列表”,每个 X 都属于一个 Y; “列表”作为一个领域概念并不重要,因为我只是想添加到现有的 Xes 集合中。在这种情况下,我采取了一种我认为有点丑陋的方法,即向我的 XController 添加“导入”操作。该代码是我的所有 Controller 中最困惑的代码,我倾向于将其分解为具有更多责任的代码(也许是 XImporter 类),但现在它“有效”。我确信比我更聪明的人会有更好的解决方案。

所以我的论点是这样的:如果你有很多非 RESTy 操作,就会有一种代码味道;也许您没有正确建模您所控制的内容。但如果你说,1-3 次不稳定的行动和重新思考问题的尝试并没有引导你走向正确的方向,也许就不值得担心。

关于model-view-controller - 避免在 MVC 中使用大型 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2073822/

相关文章:

c# - 避免硬编码 Controller 和 Action 名称

iphone - 使用 MVC 设计 iPhone 游戏的最佳实践?

c# - MVC 3 - Controller 和 ViewModels - 哪个应该包含大部分业务逻辑?

Java:声明一个变量但说它不存在

spring-mvc - Spring MVC Controller 的集成测试

asp.net-mvc - 如何在asp.net mvc 中创建一个弹出窗口?

javascript - Angular 单元测试 Controller

c# - Id 在 Action 方法中变为 Null

java - JFileChooser.getSelectedFile() 实现自定义操作按钮时返回 null

java - 将单个字符串与 JList<String> 一起用于操作