我有一个 Windows 窗体应用程序,当前在启动时加载数据库。流程是这样的:
Program.cs => Application.Run(new MainForm()); => MainForm 构造函数 => 打开数据库
因此基本上 MainForm 保存了使应用程序运行的所有部分,而 Program.cs 只是一个存根。目前,加载的数据库的名称是硬编码的,我想添加功能来指定通过命令行加载的数据库的名称。同时,我想添加稍后进行一些单元测试甚至依赖注入的能力,所以我想知道推荐哪种方法?
- 更改 MainForm 的构造函数以接受一些参数。然后更改Program.cs以读取命令行并将调用更改为
Application.Run(new MainForm());
因此
- 保持 Program.cs 和构造函数的签名不变,并检查 MainForm 构造函数中的命令行
方法一似乎更干净,因为它允许测试运行者使用测试数据库创建 MainForm,但由于我通常不是 WinForms 开发人员,我不知道如果没有默认构造函数是否会产生副作用主窗体或者是否有更好的方法?
我认为这可以归结为关注点分离。 Program 类应该关注应用程序级别的详细信息,而 MainForm 应该关注表单详细信息。然后这告诉我该程序应该解析命令行并将名称传递给表单。
您仍然可以在表单上保留默认构造函数,并将其标记为私有,或者在执行它时抛出错误。或者您仍然可以让 Program.cs 使用默认构造函数来创建表单,并简单地使用参数注入数据库名称(因此它是构造函数注入或参数注入),例如
form = new MainForm();
form.DbName = "foo";
Application.Run(form);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)