用于在c#中存储设置的设计模式

时间:2012-11-22 13:34:15

标签: c# design-patterns

我有以下与自定义设备接口的应用程序。该应用程序用于对设备进行编程。

我的应用程序可以从设备读取设置,并将设置程序设置到设备。这意味着,两套设置;当前在设备中的一组设置,以及用户通过应用程序输入的一组设置。

有不同的设备类型,都有一些共同的设置和一些特定的设备。

我在考虑两个类,包括完整的设置。两者都使用单身,所以我可以轻松访问整个项目的所有设置。但这感觉不对,关于这种情况的任何提示

3 个答案:

答案 0 :(得分:1)

不是设计模式,但我可能会这样做:

// represents a device with it's settings
public class Device
{
   public string Type { get; set;}

   public List<Setting> Settings { get; set; }
}

// represents a setting, agnostic of which device it applies to
public class Setting
{
   public string Setting { get; set; }

   public string Value { get; set; }
}

// represents mapping which devices has which settings
public class DeviceSettings
{
   public List<string> ApplicableDevices { get; set; }

   public List<Settings> ApplicableSettings { get; set; }
}

不要专注于使用的集合类型。我想你会有更多的属性。

使用此设计,您可以在运行时定义设置并将其分配给特定设备。

答案 1 :(得分:0)

看看Command pattern。您可以将设置封装在配置对象中,并将其用作控制器类的输入。在使用适当的参数配置控制器类之后,您只需调用其将处理数据的execute方法。

您也可以将此加入State patternStrategy pattern以切换处理算法(例如,在一种状态下,处理可能包括将数据发送到设备,而另一种状态则从设备接收数据)。

答案 2 :(得分:0)

我可能会这样做(我的C#有点生疏,所以不要指望语法正确):

class Settings
{
  Settings parent = null;
  Map<String, String> settings;
  String getSetting(String setting)
  {
    if (settings.contains(setting))
      return settings.get(setting);
    else if (parent != null)
      return parent.getSetting(setting);
    else return null;
  }
}

然后,常用设置是每个设备的父设备,常用设置没有父设备。

如何访问/创建这些类取决于项目的结构。包含一组这些类的单例(可能在地图中(Map<String, Setting>))是一个想法。

以这种方式做事的好处是,子设置也可以选择覆盖它的父设置。