Klient třída – Návrhový vzor klient?

ondrej256
Člen | 186
+
0
-

Ahoj,

chtěl bych Vás zeptat na názor. Máme s kolegy v práci rozdílné názory a nemůžeme se shodnout.

Příklad: Máme systém kde evidujeme produkty. Systém je napojený na x různých shopů (shoptet, shopsys, upgates, ..) kde propisujeme produkty které máme skladem.

Máme interface pro klienta, který komunikuje s externími systémy přes API.

Diskutujeme o těchto dvou verzích klienta.

První verze, má v každé metodě parametr $system, ze kterého se berou data nutné ke komunikaci (url api, jmeno, heslo)

class ShopSysClientV1 {

   public function write($entity, $system) {
      $this->sendRequest($system->getApiUrl() . '/write', $entity->toArray());
   }

   public function update($entity, $system) {
      $this->sendRequest($system->getApiUrl() . '/update', $entity->toArray());
   }

   protected function sendRequest($url, $data) {
     // poslu data na url apiny, to uz neni dulezite
   }

}

V druhé verzi se předá $system v konstruktoru a už není nutné předávat systém při každém volání nějaké metody klienta

class ShopSysClientV2 {

  public function __construct($system) {
    $this->system = $system;
  }

   public function write($entity) {
      $this->sendRequest('write', $entity->toArray());
   }

   public function update($entity) {
      $this->sendRequest('update', $entity->toArray());
   }

   protected function sendRequest($url, $data) {
      $url = $system->getApiUrl() . '/' . $url;
     // poslu data na url apiny, to uz neni dulezite
   }

}

První verze jde pěkně zaregistrovat jako služba. V případě druhé verze by musela vzniknout interfacová factory (služba), která by klienta vytvořila. Neznáte nějaký návrhový vzor „klient“ (nic jsem nenašel) nebo nenapadá vás rozumný argument proč použít verzi 1 nebo verzi 2?

Díky za názory

F.Vesely
Člen | 368
+
+13
-

Ja bych volil 2. verzi. Nedava mi moc smysl, abych pokazde shanel System, kdyz chci komunikovat pres API. To je jako bych pri kazdem dotazu do DB predaval Connection.

CZechBoY
Člen | 3608
+
0
-

ShopsysClientV2 ti muze vytvorit/byt primo v dic. Potom kdyz potrebujes pracovat s konkretni sluzbou tak si ji vyzadas. Pripadne pokud vzdy pracujes se vsemi tak ziskas vsechny instance podle interfacu a provolas vsechny.