MB: in Bridge Design Pattern zusätzliche Funktionalität als callback verdeckt übergeben

Beitrag lesen

moin,

Im Kontext Design Patterns Bridge:

  • Ich habe eine Klassen Array eines bestimmten Typs (z.B. Validator)
  • Per instanziierung der Klasse ReferedAbstraction (z.B. Builder) werden diese Validatoren in einem Array rein geladen, Anzahl unabhängig.
class Builder {

  private $container = [];

  private $validators = [];

  public function __construct() {
    $this->validators = [
      'foo' => new FooValidator,
      'bar' => new BarValidator,
      'qax' => new QaxValidator
    ];
  }

  // ...
}
  • die Validatoren müssen die ConcreteImplementator intern validieren
  • diese Validatoren müssen dann zwangläufig bei jedem Aufruf eines ConcreteImplementator (z.B. Construction)s "verdeckt" übergeben werden.
class AbstractConstruction {

  private $validator;
  
  private $params;
  
  public function setValidator( array $validators ) : void {
    $this->validators = $validators;
  }

  public function __toString() : string {
    return $this->params;
  }
}
class Builder {
  
  //...
  
  public function call( ConstructionInterface $c ) : void {
    $this->c->setValidators( $this->validators );
    $this->container[] = $this->c;
  }
  
  // ...
}

die konrete implementierung FooConstruction:

class FooConstruction extends AbstractConstruction {

  public function __construct( string $params ) {
    $this->validators->isValid( $params );
  }
}

Sähe dann in der Art dann so aus

$b = new Builder(); // reinladen der Validatoren im Array bei instanziierung
$b->
  callFoo( new FooConstrution( 'fuz' ) )
  callBar( new BarConstrution( 'buz' ) )
  callQax( new QayConstrution( 'qux' ) )
$b->result();

Frage:

Frisst das nicht soviele system resourcen wenn bei jedem Methoden aufgruf der Builder-Klasse alls Klassen Validatoren übergeben werden damit der Construction eine rauspcken kann, validieren und zurück schicken kann???

StatusQuo

Ich hab zuvor Statische Validatoren genutzt. Da ich aber dieser Builderklasse mehrfach im Runtime verwenden will, brigt die statischen Klassen wenig, es sei den, ich müsste das in einer extrem verschachtelte Kette realisieren. Auch irgend wie nicht inn der Sache. Bridge Pattern sollen Klassen lose und dynamisch gekoppelt sein und nicht starr und fest.

lgmb