gpt4 book ai didi

c# - WinForms 应用程序中的初始化代码 - Program.cs 或 MainForm?

转载 作者:行者123 更新时间:2023-11-30 20:13:54 25 4
gpt4 key购买 nike

我有一个当前在启动时加载数据库的 Windows 窗体应用程序。流程是这样的:

Program.cs => Application.Run(new MainForm()); => MainForm 构造函数 => 打开数据库

所以基本上 MainForm 包含使应用程序运行的所有点点滴滴,而 Program.cs 只是一个 stub 。目前,加载的数据库名称是硬编码的,我想添加功能以通过命令行指定要加载的数据库的名称。同时,我想在以后添加一些单元测试甚至依赖注入(inject)的能力,所以我想知道推荐哪种方法?

  • 更改 MainForm 的构造函数以接受一些参数。然后更改 Program.cs 以读取命令行并相应地更改对 Application.Run(new MainForm()); 的调用
  • 保留 Program.cs 和构造函数的签名不变,并检查 MainForm 构造函数中的命令行

方法一似乎更简洁,因为它允许测试运行器使用测试数据库创建 MainForm,但由于我通常不是 WinForms 开发人员,所以我不知道没有默认值是否会产生副作用主窗体上的构造函数还是有更好的方法?

最佳答案

我认为这归结为关注点分离。 Program 类应该关注应用程序级别的细节,MainForm 应该关注表单的细节。然后这告诉我该程序应该解析命令行并将名称传递给表单。

您仍然可以将默认构造函数保留在表单上,​​并将其标记为私有(private)或在执行时抛出错误。或者你仍然可以让 Program.cs 使用默认的构造函数来创建表单,并简单地用参数注入(inject)数据库名称(所以它要么是构造函数注入(inject)要么是参数注入(inject)),就像

form = new MainForm();form.DbName = "foo";Application.Run(form);

关于c# - WinForms 应用程序中的初始化代码 - Program.cs 或 MainForm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com