0

我有具有许多属性的类,在某些情况下,这些属性包括其他复杂的类。并非总是我会使用这个完整的模式,但有时我会这样做。创建对象、处理对象然后按需检索信息的最佳实践是什么?

我举一个非常简单的例子来澄清:

假设一个类student与一个类相关professor。此类与其他类相关,例如classes,schedules等。并非总是我需要使用所有这些信息。

我是否应该在对象中保留教授的 ID,student然后在需要时加载信息?我应该创建一个仅用于存储教授 ID 的属性,还是创建一个new professor对象而不将所有其他数据加载到其中,只存储ID? 或者两者都不是?最佳做法是什么?

谢谢。

4

4 回答 4

2

使用延迟加载模式

于 2012-05-11T14:46:01.330 回答
2

建议一

  • 您的应用程序是否需要保存和加载对象和属性的值(也称为“序列化”或“持久化”)?

  • 您的应用程序是否需要具有同一类的多个实例?

如果这个问题的答案是正确的,那么您似乎需要将数据存储在数据库中,正如@larsmans 建议的那样。

建议二

另一件事。你没有提到你使用的是什么编程语言。在 C++、Delphi(Object Pascal)、D 等编程语言中,可以通过两种方式处理另一个对象中的对象:作为对象的一部分,或者作为指向子对象的指针。

对于您的场景,我建议使用指向对象的方法。

在 Java、PHP、C#、VB.NET 等编程语言中,有一个称为引用的概念,实际上它与指向对象的指针相同,因此您无需执行任何其他操作。

非指针示例:

class SubClass
{
  public: 
    int X;
    int Y;      
}; // class SubClass

class MainClass
{
  public:
    int Color;
    SubClass SubObject;

  public:
    /* constructor */ MainClass()
    {
      this.Color = 7;
      this.SubObject();
    } // /* constructor */ MainClass(...)

    /* destructor */ ~MainClass()
    {
      this.~SubObject();
      this.Color = 0;
    } // /* destructor */ MainClass(...)
}; // class MainClass

void main()
{
  MainClass* MainObject = new MainClass();
    MainObject->Color = 5;
    MainObject->SubObject.X = 19;
    MainObject->SubObject.Y = 32;
  delete MainObject();
}  // void main(...)

指向对象的指针示例:

class SubClass
{
  public: 
    int X;
    int Y;      
}; // class SubClass

class MainClass
{
  public:
    int Color;
    SubClass* SubObject;

  public:
    /* constructor */ MainClass()
    {
      this.Color = 7;
      this.SubObject = new SubClass();
    } // /* constructor */ MainClass(...)

    /* destructor */ ~MainClass()
    {
      delete this.SubObject();
      this.Color = 0;
    } // /* destructor */ MainClass(...)
}; // class MainClass

void main()
{
  MainClass* MainObject = new MainClass();
    MainObject->Color = 5;
    MainObject->SubObject->X = 19;
    MainObject->SubObject->Y = 32;
  delete MainObject();
}  // void main(...)

干杯。

于 2012-05-11T15:22:02.343 回答
1

在一般情况下,您将需要一些实体加入您域中的实体。比如说,您将拥有一个StudentRegistry保存学生与其教授/讲师之间的通信的文件。这确实类似于 RDBMS 模式设计,因此您可以参考ER DB 设计方法(显然,您将使用类而不是表。)

于 2012-05-11T14:48:29.593 回答
0

听起来您在描述延迟加载

于 2012-05-11T14:45:16.810 回答