此桌面应用程序的业务要求是某些视图上存在通用过滤器选项。这意味着对于那些包含通用过滤器选项的视图,如果我在一个视图上检查某个选项,则包含它的每个其他视图也需要检查相同的选项(许多视图已经显示,因此需要更新这些选项)。
CommonSettings { CommonSetting1, CommonSetting2, CommonSetting3, CommonSetting4, CommonSetting5 }
ScreenASettings {ScreenASetting1, ScreenASetting2, CommonSetting2, CommonSetting4 }
ScreenBSettings {ScreenASetting1, CommonSetting1, CommonSetting2, CommonSetting3 }
// and so on
此设置需要保存在文件中以供以后阅读。这个想法是,当屏幕打开时应用此设置。如果 ScreenA 和 ScreenB 都打开了,并且我更改了 ScreenA 上的 CommonSetting2,ScreenB 也应该为此设置应用新值,因为它也包含它。
我目前的设计是这样的: - 只有一个 CommonSettings 实例存在 - 我有 CommonSettingsViewModel,它包含对 CommonSettings 实例的引用。CommonSettingsViewModel 处理所有事情:在屏幕上显示选项(向 CommonSettingsView 公开常用设置、保存常用设置、加载常用设置等) - 每个包含自定义和常用设置的 CustomViewModel 都将(通过 DI)获取对 CustomSetting 和 CommonSettingViewModel 实例的引用。通过这种方式,它可以将创建通用设置的控制权传递给 CommonSettingViewModel,并且只处理其自定义设置(加载、保存)
使用这种方法,我将负责自定义和通用设置。我在这里看到的一个缺点是,当我需要查询数据时,我总是需要同时传递 CustomSettings 和 CommonSettings 实例,而我需要两者。
您认为这种方法正确吗,或者您认为有更好的方法?
编辑:这是我用于设置的当前实现
public interface ISettings {
string ElementPath { get; set; }
Exception Error { get; }
object GetValue(string setting);
bool HasError { get; }
void Read();
void Save();
void SetValue(string setting, object value);
}
// base class for ScreenASettings, CommonSettings, etc
public abstract class SettingsBase : ISettings { ... }
// ancestor class only needs to add settings
public class CommonSettings : BaseSettings {
private bool _ommonSetting1;
[Setting]
public bool CommonSetting1 { .... }
// CommonSetting2, CommonSetting3, etc
}