C# 最佳实践-不同的程序模式/使用变量以编程方式决定窗体如何创建

C# 最佳实践-不同的程序模式/使用变量以编程方式决定窗体如何创建,c#,winforms,class,C#,Winforms,Class,在我最近的一个项目中,我已经达到了一个很好的阶段,在那里有相当多的工作要做,但是没有什么是不容易改变/修改的。现在我被要求添加..如何描述..例如,我的程序的不同“模式” 一种地图视图模式,在该模式下,程序更多地是一种图形显示,所有内容都基于绘制在地图/其他显示上的方式工作 一种数据网格模式,程序更多地基于文本等 我可以将这些信息存储在一个变量中,例如,甚至是一个包含“map”或“datagrid”的字符串,程序基于此或枚举创建gui/其进程,尽管这意味着我需要更多地移动东西 public

在我最近的一个项目中,我已经达到了一个很好的阶段,在那里有相当多的工作要做,但是没有什么是不容易改变/修改的。现在我被要求添加..如何描述..例如,我的程序的不同“模式”

  • 一种地图视图模式,在该模式下,程序更多地是一种图形显示,所有内容都基于绘制在地图/其他显示上的方式工作
  • 一种数据网格模式,程序更多地基于文本等
我可以将这些信息存储在一个变量中,例如,甚至是一个包含“map”或“datagrid”的字符串,程序基于此或枚举创建gui/其进程,尽管这意味着我需要更多地移动东西

public string mode; 
// then use dropdowntools to set this to "map" or "datagrid"

public enum mode
{
   map,
   datagrid
};
// again use dropdowntools
我是否最好将UI编码/表单的主要部分移动到两个单独的类中,一个用于map,一个用于datagrid,并根据用户选择以及不可避免的设置变量,根据需要创建这些类

我在大多数应用程序中都看到过这种情况,用户可以更改这些选项,但从来没有见过编写这种选项的最佳实践

目前我已经考虑过这样做

  public void pollDevices()
    {

            if (mode == "Map")
            {
                timer = new System.Timers.Timer(500);

                 for (int i = 0; i <= mDevices.Count - 1; i++)
                 {
                     IDeviceInterface deviceToPoll = mDevices[i];
                     timer.Elapsed += delegate { deviceToPoll.connect(deviceToPoll, this, exit); };

                 }
            timer.Enabled = true;
            }


            else if (mode == "Datagrid")
            {

            }
        }
如果有人对他们将如何着手做这类事情有任何意见,那将是一个很大的帮助。如果你需要我提供更多的信息,尽管问

  • 将显示组件分解为单独的控件,一个用于贴图,一个用于栅格
  • 创建两个控件使用的公共接口和数据源
  • 创建一个公共类或一组类,为任一控件提供数据

  • 我懂了。所以我应该创建一个接口来保存方法的模板等等,然后基本上遵循我的一个原始想法,为每个视图创建一个类,从接口继承?没错-关键是要分离显示数据和检索数据的关注点。
     public void pollDevices()
    {
    
            if (mode == "Map")
            {
                //call method in map class that does this stuff.
    
            }
    
    
            else if (mode == "Datagrid")
            {
                 //call method in datagrid class that does this stuff
            }
        }