Hallo zusammen,
ich wende seit einiger Zeit das Adapter-Pattern für externe Services an, um im Fall eines Wechsels des Dienstleisters mit möglichst geringem Aufwand diesen austausche zu können. Nun ist das Fall bereits einmal eingetreten und der Austausch hat problemlos geklappt.
Nun ist der zweite Dienstleister dran und ich merke dass das Adapter-Pattern einen großen Nachteil hat: Es scheint mir nicht für komplexere Services geeignet oder ich verstehe/mache etwas falsch. Dazu würde ich gerne einmal etwas Feedback hören. Was ich eventuell falsch mache oder ob ich richtig mit meiner Annahme bin und welche Alternativen ich ggf habe.
Hier ein (vereinfachtes) Beispiel:
Soweit so einfach. Nun kommt PaymentProviderB dazu, dessen API erwartet jetzt keinen Preis und Währung, sondern Produkt IDs, daraus berechnet er den Warenwert selbst. Zusätzlich lässt sich auch noch ein Gutscheincode eingeben. Das würde ja bedeuten dass ich die `createPayment` Methode erweitern müsste (Beispielcode!):
Zu allem übel müsste ich anschließend noch dort wo ich "createPayment(...)" aufrufe, alles umbauen um entsprechend Produkt-IDs zu übergeben statt wie vorher den Preis. Ich muss also so viel umbauen, dass man es auch direkt ohne Adapter-Pattern machen hätte können. Übersehe ich was? Mach ich einen groben Fehler? Ich wäre für jede Hilfe dankbar.
ich wende seit einiger Zeit das Adapter-Pattern für externe Services an, um im Fall eines Wechsels des Dienstleisters mit möglichst geringem Aufwand diesen austausche zu können. Nun ist das Fall bereits einmal eingetreten und der Austausch hat problemlos geklappt.
Nun ist der zweite Dienstleister dran und ich merke dass das Adapter-Pattern einen großen Nachteil hat: Es scheint mir nicht für komplexere Services geeignet oder ich verstehe/mache etwas falsch. Dazu würde ich gerne einmal etwas Feedback hören. Was ich eventuell falsch mache oder ob ich richtig mit meiner Annahme bin und welche Alternativen ich ggf habe.
Hier ein (vereinfachtes) Beispiel:
PHP-Code:
interface PaymentProvider
{
public function createPayment($price, $currency);
}
// ---
class PaymentProviderA implements PaymentProvider
{
public function createPayment($price, $currency)
{
// ...
}
}
PHP-Code:
interface PaymentProvider
{
public function createPayment($price = null, $currency = null, $productIds = null, $code = null);
}
// ---
class PaymentProviderA implements PaymentProvider
{
public function createPayment($price, $currency, $productIds = null, $code = null)
{
// ...
}
}
class PaymentProviderB implements PaymentProvider
{
public function createPayment($price = null, $currency = null, $productIds, $code)
{
// ...
}
}
Kommentar