Ich habe eine Anwendung, wo ich mit mehreren Anbietern beschäftigen müssen - jeder mit ihrer unterschiedlichen Implementierung. Nehmen wir zum Beispiel Payment Systems, es gibt viele Anbieter und Banken.Reiniger Code in Laravel für Fabrik Muster
Es gibt ein paar Dinge gemeinsam, wie Implementierungsprozess. In jedem Fall muss ich ihnen eine Rückruf-URL geben, um mir eine Antwort zu geben.
Für jetzt habe ich zwei Anbieter - VendorPay und VendorA.
Ich werde zwei Routen haben:
payment/callback/vendorpay
payment/callback/vendora
jeder von ihnen in zwei Controller-Methoden aufrufen.
processVendorpay and processVendora
Nun, wenn ich hinzufügen möchte, sagen wir mal, 15 weitere Anbieter wie diese, werde ich Methoden erstellen jedes Mal wenn ich neue Anbieter hinzu? Gibt es dafür eine sauberere Lösung?
Mein Controller rechts sieht nun wie folgt aus:
class PaymentController extends BaseController
{
protected $vendorpay_validator, $vendora_validator, $transaction, $transaction_log, $vendor_product, $vendor_transaction;
public function __construct(VendorpayValidator $vendorpay_validator, VendorAValidator $vendora_validator, Transaction $transaction, TransactionLog $transaction_log, VendorProduct $vendor_product, VendorTransaction $vendor_transaction)
{
$this->vendorpay_validator = $vendorpay_validator;
$this->vendora_validator = $vendora_validator;
$this->transaction = $transaction;
$this->transaction_log = $transaction_log;
$this->vendor_product = $vendor_product;
$this->vendor_transaction = $vendor_transaction;
}
}
Diese vier die Model Repository Objekte sind: $transaction, $transaction_log, $vendor_product, $vendor_transaction
Wenn ich mehr venodrs hinzufügen müssen, es hier auf das Hinzufügen Validator Objekt hält. Was wäre ein viel sauberer Weg, es zu tun?
Eine der Lösungen, die ich dachte, war - für mehrere Routen, ich nur eine Methode erstellen. Jetzt überprüfe ich die Route in dieser Methode und rufe die Factory-Object-Basis darauf auf.