Klient třída – Návrhový vzor klient?
- ondrej256
- Člen | 187
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