我必须为以下情况编写干净的代码有哪些可能性:
public class App : Application
{
protected override OnStartup(StartupEventArgs e)
{
var arguments = (MyArgumentClass)CommandLineArgumentParser.Parse(e.Args);
// and what now?
}
}
public class ShellViewModel : ViewModelBase
{
// ...
public SubViewModel SubViewModel {get; protected set;}
}
public class SubViewModel : ViewModelBase
{
// is some property which should be set depending on command line arguments
// in the real code it is not just one property in one view model
// but several properties in different view models
public bool MyFlag { get; set;}
}
我的问题是:
- 我在哪里存储(哪个类)并将命令行参数应用于需要它们的视图模型?
- 应用程序设置的相同问题。
我的想法:
将 App 中的设置存储为静态属性,因此我可以在需要时从每个 App.CommandLineArgumets.Flag 的视图模型中轻松访问这些值。问题:这会将视图模型与实际应用程序联系起来。在出现此问题的情况下,这正是问题所在(与 Properties.Settings.Default 相同的问题)
将 CommandLineArguments 对象传递给视图并从视图中设置视图模型的值。我在这种情况下看到的问题:我有两个使用相同视图模型类的应用程序(也许会更快)。如果我必须更改视图模型类或任何子类,我需要更新所有使用它的应用程序中的代码。但也许它仍然很干净?
对于应用程序设置,我还可以将 Propertes.Settings.Default 作为 ApplicationSettingsBase 的实例传递给视图模型,但感觉不对,视图模型负责读取并最终存储设置。
在需要的地方通过 Environment.GetCommandLineArgs() 访问命令行参数。但这需要在代码中的多个位置解析命令行参数。
对于此类问题,也许有更好/更清洁的解决方案,或者我忽略了一些东西。我正在寻找此类问题的通用解决方案。