在WinForms中实现干净的UI功能,同时保持体面的分离体系结构的最佳方式是什么?


4

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

通常我觉得我正在转向“做一切事情的大班”反模式,因为这似乎与“主”形式班相互影响。通常,即使我在类中使用相对模块化的设计来实现私有状态变量,我仍然发现它变得如此之快,实在太荒谬了。

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

0

我只会把UI逻辑在Form类,并把所有的应用程序逻辑在其自己的类:

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


static class Program 
{ 
    internal static void DoCommand1() {/* ... */} 
} 

12

你可以尝试MVP,如果你想要把UI逻辑在一个单独的类。

在模型视图中,主持人就像Martin Fowler或Michael Feathers所说的那样,UI的逻辑被分成一个叫做主持人的类,它处理来自用户的所有输入,并告诉“愚蠢”视图什么时候显示。模式的特殊可测性来自于整个视图可以被模拟对象替代的事实,这样,最重要的部分演示者可以很容易地单独进行单元测试。


3

使用MVP模式与winforms相当不错。

看看http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf

  0

0

有一件事我一直在洞最近正利用.NET的部分类功能对于其中的一些较大型的形式。如果我有一个带有5个不同选项卡的选项卡控件。我将创建部分类并将文件命名为CardImportMethods.cs,ManageLookupTables.cs等,同时将它们全部留为CentralizedForm类的一部分。

即使只是用户界面逻辑,在管理这些事情时,有这种故障已经有所帮助。