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 derAbstractClass
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 dieHelperService
-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 derConcrete[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
Sprachstörung