在WinForms中实现干净的UI功能同时保持良好的解耦架构的最佳方法是什么?

ljs*_*ljs 5 .net c# winforms

我倾向于使用相当自我记录的void doSomething()方法来实现UI功能,即如果用户按下此按钮然后执行此操作然后启用此列表框,禁用该按钮等.这是最好的方法吗?是否有更好的模式用于一般UI管理,即如何控制何时启用/禁用控件等.等取决于用户输入?

我常常觉得自己正在转向"做一切"反模式的"大班",因为很多人似乎与"主要"形式的班级互动.通常,即使我在类中包含使用相对模块化设计实现的私有状态变量,我仍然发现它增长得如此之快,这是荒谬的.

那么人们可以给我一些很好的建议来制作高质量,可测试,分离的WinForms设计而不会陷入这些陷阱吗?

Gul*_*zim 13

如果要将UI的逻辑放在单独的类中,可以尝试MVP.

在模型视图演示者中,正如Martin Fowler或Michael Feathers所说,UI的逻辑被分成一个名为presenter的类,它处理来自用户的所有输入,并告诉"哑"视图显示什么以及何时显示.模式的特殊可测试性来自于整个视图可以用模拟对象替换的事实,并且以这种方式,作为最重要部分的演示者可以容易地单独地进行单元测试.


Mar*_*ade 0

我只会将 UI 逻辑放在 Form 类中,并将任何应用程序逻辑放在它自己的类中:

class Form1 : Form
 {  
    void Button1_Click
     { 
       Program.DoCommand1();
     }
 }


static class Program
{
  internal static void DoCommand1() {/* ... */}
}
Run Code Online (Sandbox Code Playgroud)