Hej,
tak się zastanawiam jak podejść do problemu, gdzie mamy integrację z różnymi usługami zewnętrznymi, z których chcemy korzystać jedynie w produkcyjnej wersji. Przykład: mamy sklep gdzie chcemy wykonać akcję "finish order". Wiąże się to z kilkoma krokami takimi jak ustawienie statusu, wysłanie maila i inne, ale także na uderzeniu do zewnętrznej usługi, aby zapisać tam jakieś dane. A więc flow wygląda mniej więcej tak:
<?php
class OrdersController
{
function finishOrder($orderNumber)
{
.
.
.
$this->OrderService->finishOrder($orderNumber)
}
}
class OrderService
{
function finishOrder()
{
$this->setStatus();
$this->sendEmail();
// sprawdzamy tutaj?
if ($prodmMode) {
$this->ExternalService->doSomething();
}
}
}
class ExternalService
{
function doSomething()
{
// sprawdzamy tutaj?
if ($prodmMode) {
$this->http->makeApiCall(
[
//może tutaj jakiś fake lub pusty url i po prostu pomijamy to wywołanie
'url' => ''
]
)
}
}
}
I teraz gdzie stawiacie jakąś flagę, która determinuje czy uderzymy do zewnętrznego API w zależności, czy jesteśmy na środowisku testowym, czy produkcyjnym? Robicie to w kontrolerze lub serwisie (Order) na zasadzie if (isProd) czy może w każdym serwisie osobno sprawdzacie taką flagę (serwis per zewnętrzne API) czy może ustawiacie jakiś pusty/predefiniowany URL, który wiadomo, ze nie zadziała, ale flow przejdzie... a może jeszcze inaczej?
Po prostu zastanawiam się jakie podejście jest najlepsze jeśli chodzi o czytelność kodu. Mam trochę starego kodu gdzie to jest na zasadzie sprawdzenia w kontrolerze czy środowisko jest produkcyjne, ale wydaje mi się, ze to zaśmieca kod a na dodatek wraz ze wzrostem liczny zewnętrznych usług tych if-ów jest więcej (jeśli przykładowo wywołania nie mogą być w jednym miejscu) i chciałbym to zrefaktorować trochę.
Ważne: testowa wersja API nie istnieje, a więc nie mogę na dev-ie po prostu uderzyć do niej :)