如何对抗真正的大控制器。 。

问题描述 投票:0回答:3

我有一个使用 MVC 构建的 winforms 应用程序。 控制器订阅视图中的所有事件(按钮单击等)并将多个视图与模型连接。

问题是控制器现在有大约 3000 行(难以进行单元测试)代码。

避免让控制器做所有事情并变得如此庞大的最佳实践是什么?

c# winforms model-view-controller
3个回答
4
投票

需要指出的一件明显的事情可能是一个控制器不必作为一个类来实现。 MVC 设计模式只是声明 M、V 和 C 是独立的组件,但并不是每个组件都必须是一个且只能是一个类。


3
投票

副控制器

控制器可以拆分为各种控制器,而不会破坏 MVC 模式。

在 3k 行时,可以肯定的是某个地方的内聚力被破坏了。尝试将相同的行为组合在一起并创建新的控制器。这样,您将拥有一个将调用“子”控制器的“主”控制器。

不带子的方法:

根据我自己的经验,我没有 1 个控制器用于整个 WinForms 应用程序。我是如何创建它的,我有多个从菜单加载的模块。当这些模块被加载(表单->视图)时,它带有自己的控制器。这样,每个模块只有 1 个控制器。这些控制器的代码通常不超过 500 行。


0
投票

取决于具体情况,但假设您不应该创建新控制器,则有多种方法。

很大程度上取决于您的设置。 一种常见的方法是使用一个服务层或服务代理来为不特定的控制器工作。 使用接口助手甚至静态助手应该可以消除一些重复。 假设它被分解为可测试的方法,300 行听起来并不算糟糕。

除了经常重复的创建更多控制器的口头禅之外,我也有兴趣听到其他意见。 我们使用 MVP 并尝试了子控制器,但这确实依赖于仔细使用,并且可能是一个坏主意。

在 MVP 中,每个模块都有一个控制器是很常见的,这与应用程序的逻辑部分相关。 您的领域内应该有一些清晰的内容,还有一些可能更难以区分。

© www.soinside.com 2019 - 2024. All rights reserved.