Hallo leute,
ich würde gerne mal in Erfahrung bringen wie ich korrekt den Presenter in der Clean Code Architektur verwenden kann.
Folgendes Bild:

Ich nutze an der Stelle den Begriff UseCase statt Interactor, um eine Verwirrung vorzubeugen.
Ich habe Ursprünglich ein UseCase interface angelegt um zu definieren wie jedes UseCase auszusehen hat.
Meine konkreten UseCases hatten wiederum eine doProcess methode mit Konkreten Request/Response Typehint
Natürlich musste man die FooRequests von den basis Requests ableiten damit das Funktioniert.
Die Response Objekte habe ich von außen Injeziert damit ich diese je nach dem Welches Framework ich nutzen würde, dann konkret implementieren kann.
Dann hat mir aber Anthony Ferrara(einige PHP Entwickler müssten ihn sicherlich kennen und wissen dass er doch ein erfahrener Entwickler ist) gesagt dass ich das so nicht machen darf. Und hat dabei auf folgenden Artikel verlinkt http://en.wikipedia.org/wiki/Covaria...ter_science%29 (Wobei ich das mit den Request/Responses aus Symfony Console application übernommen habe, dort ist es genauso definiert mit InputInterface und OutputInterface)
Zusätzlich habe ich neulich die Mocking Videos von cleancoders.com angesehen und da war es Tatsächlich so, dass innerhalb des Interactors(bie mir UseCase) das Response Objekt erstellt wurde, dieser wurde dann an den Presenter übergeben.
Also habe ich mir meine Struktur noch mal durch den Kopf gehen lassen und will jetzt genauso wie oben im Bild mit Presenter Arbeiten.
Mein erster gedanke wäre, ich erstelle einen Presenter interface den ich in meine UseCases injeziere.
So kann ich dann zb ein MustachePresenter erstellen der dann das Response direkt Rendern kann.
Aber dann habe ich folgendes gelesen
http://blog.8thlight.com/uncle-bob/2...hitecture.html
Hier spricht er von Mehreren Presentern. Soll das etwa heißen dass ich Pro UseCase dann einen Eigenen Presenter erstellen muss? Oder eher Pro Output? Also ConsolePresenter, MustachePresenter ?
Oder habe ich überhaupt alles Falsch verstanden? Bin aktuell ein Wenig verwirrt weil ich diese eine Zeile in dem Video gesehen habe + den Artikel mit Covariance gelesen habe(und nur Teilweise verstanden habe)
Vielleicht kann mich ja einer hier aufklären?
Viele Grüße
ich würde gerne mal in Erfahrung bringen wie ich korrekt den Presenter in der Clean Code Architektur verwenden kann.
Folgendes Bild:

Ich nutze an der Stelle den Begriff UseCase statt Interactor, um eine Verwirrung vorzubeugen.
Ich habe Ursprünglich ein UseCase interface angelegt um zu definieren wie jedes UseCase auszusehen hat.
PHP-Code:
interface UseCase {
public function process(Request $request,Response $response);
}
PHP-Code:
class FooUseCase implements UseCase{
public function process(Request $request,Response $response){
$this->doProcess($request,$response);
}
public function doProcess(FooRequest $request,FooResponse $response){
//Fancy magic
}
}
Die Response Objekte habe ich von außen Injeziert damit ich diese je nach dem Welches Framework ich nutzen würde, dann konkret implementieren kann.
Dann hat mir aber Anthony Ferrara(einige PHP Entwickler müssten ihn sicherlich kennen und wissen dass er doch ein erfahrener Entwickler ist) gesagt dass ich das so nicht machen darf. Und hat dabei auf folgenden Artikel verlinkt http://en.wikipedia.org/wiki/Covaria...ter_science%29 (Wobei ich das mit den Request/Responses aus Symfony Console application übernommen habe, dort ist es genauso definiert mit InputInterface und OutputInterface)
Zusätzlich habe ich neulich die Mocking Videos von cleancoders.com angesehen und da war es Tatsächlich so, dass innerhalb des Interactors(bie mir UseCase) das Response Objekt erstellt wurde, dieser wurde dann an den Presenter übergeben.
Also habe ich mir meine Struktur noch mal durch den Kopf gehen lassen und will jetzt genauso wie oben im Bild mit Presenter Arbeiten.
Mein erster gedanke wäre, ich erstelle einen Presenter interface den ich in meine UseCases injeziere.
PHP-Code:
interface Presenter{
public function setResponse(Response $response);
}
Aber dann habe ich folgendes gelesen
http://blog.8thlight.com/uncle-bob/2...hitecture.html
Interface Adapters
The software in this layer is a set of adapters that convert data from the format most convenient for the use cases and entities, to the format most convenient for some external agency such as the Database or the Web. It is this layer, for example, that will wholly contain the MVC architecture of a GUI. The Presenters, Views, and Controllers all belong in here.
The software in this layer is a set of adapters that convert data from the format most convenient for the use cases and entities, to the format most convenient for some external agency such as the Database or the Web. It is this layer, for example, that will wholly contain the MVC architecture of a GUI. The Presenters, Views, and Controllers all belong in here.
Oder habe ich überhaupt alles Falsch verstanden? Bin aktuell ein Wenig verwirrt weil ich diese eine Zeile in dem Video gesehen habe + den Artikel mit Covariance gelesen habe(und nur Teilweise verstanden habe)
Vielleicht kann mich ja einer hier aufklären?
Viele Grüße
Kommentar