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

标签 c# oop

<分区>

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

这里是哲学问题。当我编写 Windows 窗体应用程序时,我非常努力地将 UI 和数据结构分开。但我想知道我是否以最佳方式(面向对象)做到这一点。

例如,如果我有 MyClass,而我的应用程序需要其中的许多类,可能存储在一个列表中,我是否应该使该列表成为 Form1 的成员(Form1 是“主”窗体)?如果没有,我应该在哪里实例化列表?对公开声明还是私有(private)声明有任何看法,还是只是需要什么?

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

  public Form1 ()
  {
    InitializeComponent();
  }
}

最佳答案

这取决于。如果您的列表存储与 UI 相关的内容,例如表单控件,那么是的,那可能是放置它的最佳位置。

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

编辑:在某些时候,您的表单将必须持有对您的非 UI 类之一的实例的引用。我认为(尽管再次强调,在没有更多上下文的情况下,不能 100% 确定)这些对象之一应该是保留列表的对象。

尝试让您的逻辑尽可能独立于表单 - 即:尽可能少地从表单操作该列表,而尽可能多地从非 UI 类操作该列表。您可能最终会发现,您根本不需要表格来保存对列表的引用。

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

关于C# 我的数据对象集合应该在哪里实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320567/

相关文章:

ios - 我怎样才能让我的函数快速接受两个不同的对象?

c# - 如何在.NET Core中使用多个项目创建docker镜像?

c# - 如何调试windows store app OnActivated事件

c# - 系统.Runtime.Serialization.InvalidDataContractException : No set method for property

dynamic - 静态分配与动态分配与自动分配

javascript - 动态 JavaScript 原型(prototype)扩展

c# - 在 Xamarin/Maui C# 库中找不到 RegisterForActivityResult?

c# - 内存不足时释放的动态变量?

PHP - 严格的标准 : Accessing static property as non static - Nothing is static?

java - 里氏替换原则 - 我在这里违反了它吗?