Instanzstrukturen mit TraitsHelper oder HelperService Meinung
bearbeitet von MBmoin,
iIch 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**:
~~~php
//// Abstracts ////
abstract class AbstractInstance {
trait TraitHelper;
private $_storage;
}
//// Concretes ////
class ConcreteInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteFooInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteBarInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnOtherThing ( $params ); // TraitHelper
}
}
class ConcreteQuzInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnyThing ( $params ); // TraitHelper
}
}
class ConcreteTokInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doNoThing ( $params ); // TraitHelper
}
}
//// Traits ////
trait TraitHeper {
protected function _doSomeThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnOtherThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnyThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doNoThing ( 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
Instanzstrukturen mit TraitsHelper oder HelperService Meinung
bearbeitet von MBmoin,
iIch 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**:
~~~php
//// Abstracts ////
abstract class AbstractInstance {
trait TraitHelper;
private $_storage;
}
//// Concretes ////
class ConcreteInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteFooInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteBarInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnOtherThing ( $params ); // TraitHelper
}
}
class ConcreteQuzInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnyThing ( $params ); // TraitHelper
}
}
class ConcreteTokInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doNoThing ( $params ); // TraitHelper
}
}
//// Traits ////
trait TraitHeper {
protected function _doSomeThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnOtherThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnyThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doNoThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
}
~~~
Ich sehe da viele Vorteile:
**Pros**
* direkter zugriff von `TraitHelper` und nicht über `$this->helper`;
* Einsatz von `protected`- und nicht `public`-Methoden
* Kapselung der privaten, abstrakten Instanz Eigenschaften `$this->_property`
* `Concrete[Indentifier]Instance` haben keine Instanz Eigenschaften
**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 aufrufenum 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 Klasse jeders mal instanziieren werden.
Eure Meinung bitte.
lgmb
--
Sprachstörung
Instanzstrukturen mit TraitsHelper oder HelperService Meinung
bearbeitet von MBmoin,
Ich habe ein Problem in einer Instanzstruktur.
Ich habe Konkrete Klassen, die für einen Output parameter Sammeln
Ich hab diese Problem, wie unten beschrieben, nur _"schematisch"_ gelöst.
Es soll für den **SQLGenerator** sein:
~~~php
//// Abstracts ////
abstract class AbstractInstance {
trait TraitHelper;
private $_storage;
}
//// Concretes ////
class ConcreteInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteFooInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doSomeThing ( $params ); // TraitHelper
}
}
class ConcreteBarInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnOtherThing ( $params ); // TraitHelper
}
}
class ConcreteQuzInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doAnyThing ( $params ); // TraitHelper
}
}
class ConcreteTokInstance {
public function __construct ( AbstractInterface $params ) {
$this->_doNoThing ( $params ); // TraitHelper
}
}
//// Traits ////
trait TraitHeper {
protected function _doSomeThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnOtherThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doAnyThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
protected function _doNoThing ( AbstractInterface $params ) : void {
$this->_storage[] = $params;
}
}
~~~
Ich sehe da viele Vorteile:
**Pros**
* direkter zugriff von `TraitHelper` und nicht über `$this->helper`;
* Einsatz von `protected`- und nicht `public`-Methoden
* Kapselung der privaten, abstrakten Instanz Eigenschaften `$this->_property`
* `Concrete[Indentifier]Instance` haben keine Instanz Eigenschaften
**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 aufrufenum 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 Klasse jeders mal instanziieren werden.
Eure Meinung bitte.
lgmb
--
Sprachstörung