2016-05-21 7 views
2

Ich habe eine Klasse namens Sharer, die eine Service Schnittstelle in der Konstrukt-Methode akzeptiert. Service kann FacebookService oder TwitterService und so weiter sein. Jede Service Klasse verfügt über eine post Methode, die alle Array-Daten, die Sie an diese Methode übergeben, mit einer eigenen Verbindung (entweder facebook oder twitter in diesem Beispiel) posten.Wie kann ich diesen Code in Laravel effizient strukturieren?

Jetzt die Sharer Klasse normalizes Daten vor dem Senden an die service Post-Methode. Durch die Normalisierung wird überprüft, ob das Objekt, das wir an diese post-Methode senden, nur ein einfaches Array oder eine Model Klasse ist. Model kann entweder Project Modell oder Image Modell oder Video Modell und so weiter sein.

Wenn es sich um eine Modellklasse handelt, ruft es den Transformator dieses bestimmten Modells auf. Transformers sind nur Hilfsklassen, die die Modellinstanz akzeptieren und sie haben zwei Methoden - facebook und twitter in diesem Fall. Und jede Methode gibt ein formatiertes Array zurück, das für die Verbindung spezifisch ist.

So zum Beispiel, facebook Methode ergreift die erforderlichen Felder (die benötigt werden, um auf Facebook zu posten) aus dem Modell und sendet das Array zurück. Und Twitter-Methode tut das gleiche für twitter's Pflichtfelder.

Jetzt ist die Sache, mit der ich ein bisschen feststecke, diese spezifische Methode auf der Transformatorklasse anzurufen. Ich möchte so etwas tun:

aber offensichtlich möchte ich es irgendwie dynamisch machen und habe diese if-aussagen nicht. Was wäre ein besserer Ansatz dafür?

Antwort

0

Ich löste es dies zu tun:

$method = $this->resolveMethodToCall(); 

protected function resolveMethodToCall() 
{ 
    $reflection = new ReflectionClass($this->service); // service being either a FacebookService class or TwitterService 

    $shortName = $reflection->getShortName(); 

    return strtolower(str_replace('Service', '', $shortName)); 
} 

wahrscheinlich nicht die beste Lösung, aber gut funktioniert und danach ist mir zu überprüfen, ob die beschlossene Methode tatsächlich existiert auf dem Transformator Klasse und eine Ausnahme auslösen, wenn es doesn t.

Verwandte Themen