C#应该在哪里实例化我的数据对象集合

本文关键字:数据 对象 集合 我的 实例化 在哪里 | 更新日期: 2023-09-27 18:28:19

我使用C#,但我认为这适用于大多数编程语言。

哲学问题在这里。当我编写windows窗体应用程序时,我会非常努力地将UI和数据结构分开。但我想知道我是否以最好的方式来做,OO明智。

例如,如果我有MyClass,并且我的应用程序需要其中许多,可能存储在List中,我是否应该将该List作为Form1的成员(Form1是"主"表单)?如果没有,我应该在哪里实例化列表?对公开声明与私人声明有任何意见,还是这只是一个需要什么的问题?

public partial class Form1 : Form 
{
  private List<MyClass> myClassList; // good idea? Bad idea?
  public Form1 ()
  {
    InitializeComponent();
  }
}

C#应该在哪里实例化我的数据对象集合

这取决于情况。如果你的列表存储了与UI相关的东西,比如表单控件,那么是的,那可能是它的最佳位置

否则,这将取决于上下文——我们在这里看不到全部。

编辑:在某个时刻,您的表单将不得不保存对某个非UI类实例的引用。我认为(不过,在没有更多上下文的情况下,不能100%确定)这些对象中的一个应该是保留列表的对象。

尽量保持逻辑与表单的独立性,即:从表单中尽可能少地操作列表,从非UI类中尽可能多地操作列表。你最终可能会发现,你根本不需要表格来保存对列表的引用。

再次编辑:如果我有一个宠物店的系统,我可能会有一个犬舍类和一个包含小狗类别物品的通用列表。犬舍实例将包含小狗的列表,而不是UI。我希望这个小例子能更清楚地说明我的观点。

这一切都是关于选择数据的范围,以及您将定期对它们执行什么类型的操作。例如,您可能希望程序的其他部分了解该列表,但他们可能没有来了解Form1的存在。当您开始以与Form1类无关的方式对该列表执行操作时,事情也会变得一团糟。

每当你创建一个新的变量时,问问自己一些问题。其他类需要了解这个变量吗?我需要对这个变量执行独立于表单的操作吗?这个变量是否真的属于形式?

问自己这些类型的问题可以在未来节省你的时间,并使你的程序更可读,更易于维护。

对象列表的内部表示不错(尽管如果只需要它来绘制表单,那么应该有充分的理由浪费额外的内存),但列表(如果需要它来有意义地呈现表单)应该是构造函数中的一个参数。