[ChAoZ]
Rear Admiral
- Registriert
- Jan. 2010
- Beiträge
- 5.288
Hallo zusammen,
ich bin grad dran an einem "Mock-Service" welcher unser Backend (Oracle) mockt.
Das Problem ist, es gibt nur einen Endpoint, an welchen viele Daten geschickt werden, u.a. der Webservice welcher aufgerufen werden soll. In dem Payload ist also die "Funktion" enthalten welche auf der Oracle aufgerufen werden.
Nun muss ich im Mock-Service diese Parameter auswerten und den richtigen Webservice "mocken" welcher dort benötigt wird.
Hoffe soweit ist alles verständlich.
Aktuell mache ich das mit einer Factory.
Es läuft. Es ist erweiterbar, es ist lesbar aber es gefällt mir dennoch nicht.
Später wird das Switch-Case sicherlich um die 30 Cases haben, das wird dann unübersichtlich und spätestens dann muss die Stelle nochmal angefasst werden.
Welche Pattern eignen sich dafür?
Sowas wie das, gefällt mir aber auch nicht so recht...
Danke fürs Feedback.
ich bin grad dran an einem "Mock-Service" welcher unser Backend (Oracle) mockt.
Das Problem ist, es gibt nur einen Endpoint, an welchen viele Daten geschickt werden, u.a. der Webservice welcher aufgerufen werden soll. In dem Payload ist also die "Funktion" enthalten welche auf der Oracle aufgerufen werden.
Nun muss ich im Mock-Service diese Parameter auswerten und den richtigen Webservice "mocken" welcher dort benötigt wird.
Hoffe soweit ist alles verständlich.
Aktuell mache ich das mit einer Factory.
PHP:
class WebserviceFactory
{
public static function factory(Request $request): Webservice
{
$webserviceName = static::getWebserviceNameByFunctionName($request);
switch ($webserviceName) {
case 'FETCH_EXAMPLE_DATA__BY_ID':
$webservice = new FetchExampleDataByIdWebservice();
break;
case 'FETCH_EXAMPLE_DATA__BY_NAME':
$webservice = new FetchExampleDataByNameWebservice();
break;
default:
throw new InvalidArgumentException("Webservice $webserviceName is undefined", ResultCode::GENERAL_ERROR);
}
return $webservice;
}
private static function getWebserviceNameByFunctionAndShaping(Request $request): string
{
return sprintf('%s__%s', $request->function, $request->variation);
}
}
Es läuft. Es ist erweiterbar, es ist lesbar aber es gefällt mir dennoch nicht.
Später wird das Switch-Case sicherlich um die 30 Cases haben, das wird dann unübersichtlich und spätestens dann muss die Stelle nochmal angefasst werden.
Welche Pattern eignen sich dafür?
Sowas wie das, gefällt mir aber auch nicht so recht...
PHP:
$webservice = $request->function . '__' . $request->variation;
if (class_exists($webservice)) {
return new $webservice();
}
Danke fürs Feedback.