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

时间:2008-11-29 14:39:59

标签: c# winforms model-view-controller

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

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

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

3 个答案:

答案 0 :(得分:4)

要指出的一个显而易见的事情可能是,一个控制器不必实现为一个类。 MVC设计模式简单地指出M,V和C是单独的组件,但不是每个都必须是一个,而且只有一个。

答案 1 :(得分:3)

子控制器

控制器可以在各种 sub 控制器中拆分,而不需要代理MVC模式。

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

没有子的方法:

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

答案 2 :(得分:0)

取决于具体情况,但假设您不在创建新控制器的地方,有几种方法。

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

除了经常创造更多控制器的咒语之外,我还有兴趣听到其他意见。我们使用MVP并尝试使用子控制器,但这确实依赖于谨慎使用,这可能是一个坏主意。

MVP中每个模块有一个控制器是常见的,它与应用程序的逻辑部分有关。您的域中应该有一些明确的,有些可能更难以区分。