我有以下与自定义设备接口的应用程序。该应用程序用于对设备进行编程。
我的应用程序可以从设备读取设置,并将设置编程到设备。这意味着,有两组设置;当前在设备中的一组设置,以及用户通过应用程序输入的一组设置。
有不同的设备类型,都有一些共同的设置和一些设备特定的设置。
我在考虑两个课程,都有完整的设置。两者都使用单例,因此我可以轻松访问整个项目的所有设置。但这感觉不对,关于这种情况的任何提示
我有以下与自定义设备接口的应用程序。该应用程序用于对设备进行编程。
我的应用程序可以从设备读取设置,并将设置编程到设备。这意味着,有两组设置;当前在设备中的一组设置,以及用户通过应用程序输入的一组设置。
有不同的设备类型,都有一些共同的设置和一些设备特定的设置。
我在考虑两个课程,都有完整的设置。两者都使用单例,因此我可以轻松访问整个项目的所有设置。但这感觉不对,关于这种情况的任何提示
不是设计模式,但我可能会这样做:
// 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; }
}
不要专注于使用的集合类型。我想你会有更多的属性。
使用此设计,您可以在运行时定义设置并将它们分配给特定设备。
我可能会这样做(我的 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>
) 中)是一个想法。
以这种方式做事的好处是,子设置也可以选择性地覆盖其父设置的设置。