Home > Software engineering >  Who is responsible for creating part of main class?
Who is responsible for creating part of main class?

Time:01-31

There is a major class Panorama with parts as composition PanoramaViewOver.

class Panorama {
  panoramaViewOver: PanoramaViewOver | null;
}

Who is responsible to create a class PanoramaViewOver if needed? I can create wrapper class that creates a new Panorama() and creates a PanoramaViewOver():

class Creator {
  panorama: Panorama;

  createPanorama() {
    this.panorama = new Panorama();
  }

  createPanoramaViewOver() {
    const view  = new PanoramaViewOver();
    if(this.panorama) this.panorama.view = view;
  }
}

Another way is create a public method createPanoramaViewOver() inside main class Panorama().

What is a better way?

CodePudding user response:

Instead of createPanorama() and createPanoramaViewOver() I would use create() which implicitly creates a Panorama instance and createWithPanorama(Panorama panorama) which takes an already initialized Panorama object.

Both methods would need to be static resembling a factory method pattern.

This way you can set panorama.view outside of the Creator class.

It would look like this:

class Creator {
  private _panorama: Panorama | null;

  constructor(panorama : Panorama | null) {
      this._panorama = panorama;  
  }

  static create() {
    return new Creator(new Panorama());
  }

  static createWithPanorama(panorama : Panorama | null) {
    return new Creator(panorama);
  }
}

You would use it like this:

let creator = Creator.create();
let creatorWithoutPanorama = Creator.createWithPanorama(null);

let p = new Panorama();
p.view = /* something */;

let creatorWithPanoramaViewOver = Creator.createWithPanorama(p);

It's not idiomatic to initialize each member of a class with different methods.

You usually do that in one place only, most of the time in the constructor.

  • Related