Ich versuche, in C ++ (C ++ 11) ein sehr einfaches Beispiel nach dem von Onkel Bob Martin beschriebenen Clean Architecture-Konzept zu programmieren hier (Bild unten):
Die Idee ist, etwas Text von einem Controller zu lesen und es von einem Presenter zu drucken. Ich habe etwas gemacht, aber es sieht nicht so aus, als würde es dem sauberen Fluss und dem DIP des Blogposts folgen.
Unter anderem denke ich, dass der Fluss falsch ist, da zum Beispiel der IUseCaseInputPort über den IUseCaseOutputPort Bescheid wissen muss (die Lesefunktion hat den IUseCaseOutputPort als Eingabeparameter, wodurch eine weitere Abhängigkeit erzeugt wird ...).
Ich würde es sehr schätzen, wenn mir jemand Tipps geben könnte, wie man das am besten umsetzen kann. Vielen Dank im Voraus.
%Vor%Für Interessierte eine Ergänzung zu meiner Frage, wie sie von BЈovìћ vorgeschlagen wurde. Sehr einfaches Beispiel. Nur um den Ablauf dieses Modells zu zeigen.
%Vor%Unter anderem denke ich, dass der Fluss falsch ist, da zum Beispiel der IUseCaseInputPort über den IUseCaseOutputPort Bescheid wissen muss (die Lesefunktion hat den IUseCaseOutputPort als Eingabeparameter, wodurch eine weitere Abhängigkeit erzeugt wird ...).
Ja, das ist in der Tat falsch. Eine Methode zum Abrufen von Daten sollte nicht wissen, was damit gemacht wird.
Eine Lösung ist ziemlich einfach. Ändern Sie die IUseCaseInputPort::read
-Methode, um das Ergebnis zurückzugeben, anstatt die Methode von IUseCaseOutputPort aufzurufen:
Noch eine Sache. Sie sollten keine Eingabe- und Ausgabeobjekte in der Methode displayInHtmlSomethingFromStdIn()
erstellen. Stattdessen sollten Sie eine Art Abhängigkeitsinjektion verwenden. Das heißt, Sie erstellen diese Objekte außerhalb und übergeben sie durch einen Zeiger oder Verweis auf das ControllerToDisplayHtml
-Objekt.