MB: Instanzstrukturen mit TraitsHelper oder HelperService Meinung

Beitrag lesen

moin,

ich habe ein Problem in einer Instanzstruktur. Für das Problem habe ich Concrete[Indentifier]Instance-Klassen, die für einen Output parameter sammelt. Dieses Problem habe ich, wie unten beschrieben, "schematisch" gelöst. Es ist für den SQLGenerator:

//// Abstracts ////

abstract class AbstractInstance {
  trait TraitHelper;

  private $_storage;
}

//// Concretes ////

class ConcreteFooInstance {
  public function __construct ( AbstractInterface $params ) {
    $this->_doSomeThing ( $params ); // TraitHelper
  }
}

class ConcreteBarInstance {
  public function __construct ( AbstractInterface $params ) {
    $this->_doSomeThing ( $params ); // TraitHelper
  }
}

class ConcreteQuzInstance {
  public function __construct ( AbstractInterface $params ) {
    $this->_doSomeThing ( $params ); // TraitHelper
  }
}

class ConcreteTokInstance {
  public function __construct ( AbstractInterface $params ) {
    $this->_doSomeThing ( $params ); // TraitHelper
  }
}

//// Traits ////

trait TraitHeper {
  protected function _doSomeThing ( AbstractInterface $params ) : void {
    $this->_storage[] = $params;
  }
}

Ich sehe da viele Vorteile:

Pros

  • direkter Zugriff von TraitHelper-Trait
  • Einsatz von protected-Methoden
  • Kapselung der privaten, abstrakten Instanz Eigenschaften $this->_storage
  • Concrete[Indentifier]Instance müssen keine Instanz Eigenschaften haben

Cons

  • Dieses TraitHelper muss zwingend in der AbstractClass enthalten sein.

Ich kann das auch anders lösen, indem ich die TraitHelper-Klasse in HelperService umforme. Jedoch dann müsste ich…

  • …alle Methoden public deklarieren und mindestens eine Methoden im z.B. parent::__construct() realisieren.
  • alle Concrete[Indentifier]Instance müssten zusätzlich im Konstructor den Abstracten Konstructor aufrufen, um die HelperService-Klasse zu instanziieren.

Ich könnte die HelperService-Klasse auch in der konkreten Klasse Concrete[Indentifier]Instance realisieren jedoch…

  • …die Parameterübergabe zur AbstractInstanz-Klasse "verdeckt" zur realisieren, ist nicht möglich, meiner auffassung nach.
  • …muss die HelperService-Klasse in der Concrete[Indentifier]Instance jeders mal instanziieren werden.

Ich möchte natürlich sehr verständlich programmieren aber auch struktrierter und organisierter. Eure Meinung bitte.

lgmb

--
Sprachstörung

akzeptierte Antworten

0 66

Instanzstrukturen mit TraitsHelper oder HelperService Meinung

MB
  • meinung
  • php
  • programmiertechnik
  1. 1
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          MB
  2. 0
    MB
    1. 0
      pl
      1. 0
        MB
        1. -2
          pl
          1. 0
            MB
            1. 0
              pl
        2. -1
          pl
          1. 0
            MB
            1. 0
              pl
          2. 0
            dedlfix
            1. 0
              MB
              1. 1
                dedlfix
                1. 0
                  MB
              2. -1
                pl
  3. 2
    Rolf B
    1. 0
      MB
      1. 0
        Rolf B
        1. 0
          pl
          1. 0
            Rolf B
            1. 0
              pl
          2. -1
            pl
            1. 0
              dedlfix
              1. 0
                pl
  4. -1
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          MB
          1. 0
            Rolf B
            1. 1
              pl
            2. 1
              dedlfix
              1. 1
                Rolf B
                1. 0
                  dedlfix
              2. 1
                pl
                1. 0
                  dedlfix
                  1. 0
                    Rolf B
                    1. 0
                      dedlfix
            3. 0
              MB
  5. 0
    pl
    1. 0
      MB
      1. 0
        pl
        1. 0
          Rolf B
          1. 0
            pl
      2. 0
        MB
        1. 0
          pl
          1. 0
            MB
  6. 0
    MB
    1. 3
      dedlfix
      1. 0
        MB
        1. 0
          Matthias Apsel
          1. 0
            MB
            1. 0
              Matthias Apsel
              1. 0
                Rolf B
                1. 0
                  Matthias Apsel
                  1. 0
                    Rolf B
                    1. 0
                      Matthias Apsel
            2. 1
              dedlfix
              1. 0
                MB
    2. -1
      pl
    3. 1
      Rolf B
      1. 0
        MB
        1. 0
          MB