如何在不降低性能的情况下处理对象内部对象的最佳技术?

时间:2012-05-11 14:41:43

标签: oop

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

我给出了一个非常简单的例子来澄清:

设置与班级student相关的班级professor。此类与其他类相关,例如classesschedules等。总之,我需要使用所有这些信息。

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

感谢。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

建议1

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

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

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

建议2

另一件事。您没有提到您使用的编程语言。在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(...)

干杯。

答案 2 :(得分:1)

在一般情况下,您需要一些实体加入您域中的实体。比如说,你将有一个StudentRegistry来保存学生和他们的教授/讲师之间的通信。这确实类似于RDBMS架构设计,因此您可以参考ER DB design method(显然,您将拥有类而不是表。)

答案 3 :(得分:0)

听起来你在描述lazy loading