TheWorldDrown Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 (bearbeitet) Bitte sagt mir, ob mein Vorgehen korrekt ist. Möchte ich meine Logik von meiner GUI trennen, verfahre ich folgendermaßen: Mein Controller, instanziiert ein Objekt der Klasse View und ein Objekt der Klasse Logik. Public Class Controller(){ private View myView; private Logic myLogic; public Controller(){ myLogic = new Logic(); myView = new View(myLogic); } } Meine View erhält im Konstruktor mein Objekt der Klasse Logik. Public Class View(){ private Logic logic = null; //paar Klassenmember public View(Logic myLogic){ this.logic = myLogic; } } Somit habe ich keine Abhängigkeit zw. meiner View und meiner Logik. Würde ich die Abstraktion noch weiter erhöhen wollen, kann ich der View ein Interface übergeben das meine Logik implementiert. Ist das richtig? Ist das schon MVC Pattern? Bearbeitet 11. März 2020 von TheWorldDrown Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheGuy Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 (bearbeitet) Natürlich hast du eine Abhängigkeit zwischen deiner View und deine logic, du injectest das eine in das andere. Außerdem hast du eine doppelte Abhängigkeit von der logic Klasse, die steht in der View und in der Controllerklasse. Bearbeitet 11. März 2020 von TheGuy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 JimTheLion Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 Moin, aktuell ist View von der konkreten Logic-Klasse abhängig. Wenn du ein Interface hättest wäre View immer noch von einem Logic-Typen (einer Klasse die das Interface implementiert) abhängig, aber nicht von dieser konkreten Logic-Klasse - du könntest die Logic-Klassen also tauschen. Zitat Meine View erhält im Konstruktor mein Objekt der Klasse Logik. Zu Zitat Meine View erhält im Konstruktor ein Objekt des Typs Logik. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheWorldDrown Geschrieben 11. März 2020 Autor Teilen Geschrieben 11. März 2020 Kann mir jemand anhand meines Codebeispiels zeigen wie es richtig geht? Wäre Superklasse 💖 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Defneqon Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 vor einer Stunde schrieb TheGuy: Natürlich hast du eine Abhängigkeit zwischen deiner View und deine logic, du injectest das eine in das andere. Außerdem hast du eine doppelte Abhängigkeit von der logic Klasse, die steht in der View und in der Controllerklasse. Das mit der doppelten Abhängigkeit stimmt nicht. Du kannst hier ganz normal einen Controller instanziieren, wo bitte ist da die Abhängigkeit von Logic?? Aktuell besteht lediglich eine Abhängigkeit zwischen Logic und View, da der Konstruktor der View ein Objekt von Logic benötigt. Nur weil hier speziell bei der Konstruktion des Controllers die Variable logic gesetzt wird, bedeutet das noch keine Abhängigkeit. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheWorldDrown Geschrieben 11. März 2020 Autor Teilen Geschrieben 11. März 2020 (bearbeitet) vor 5 Minuten schrieb Memento: Ich rieche eine subtile Bitte zum Erledigen von Hausaufgaben. Zeig doch mal, wie du es lösen würdest. Ich bin mir sicher, dass hier niemand deine Hausaufgaben machen wird - aber genauso sicher ist, dass man Dir bei der eigenständigen Lösung helfen wird. Was heißt Hausaufgaben. Der Code findet keine Anwendung. Er dient nur dazu die Trennung der Abhängigkeiten zu verstehen. Ich würde ein Interface erstellen z.B. ILogic und die Klasse Logic davon erben lassen. Dann kann ich meiner View ein Objekt von ILogic übergeben und kann somit die Logic jederzeit austauschen, sofern diese wieder ILogic implementiert. Das gleiche könnte man mit der View machen. Und dem Controller bei der instanziierung ein Interface IView übergeben. Damit kann man die View ebenfalls austauschen. Aber das scheint nicht die richtige Vorgehensweise zu sein. Wird mir zumindest hier gerade vermittelt. Bearbeitet 11. März 2020 von TheWorldDrown Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheGuy Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 Logic ist ein Feld in Controller, und wird über den Konstruktor injected. Veränderst du das Objekt in View wird das Objekt in Controller auch geändert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Defneqon Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 Ah okay, jetzt weiß ich, was mit doppelt gemint ist. Hast Recht, sry. Nehme meinen vorlauten Beitrag zurück. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Defneqon Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 (bearbeitet) Und nochmal zum TE: Dir wird eigentlich nicht vermittel, dass das die falsche Vorangehensweise ist... Also bezogen auf das: "Ich würde ein Interface erstellen z.B. ILogic und die Klasse Logic davon erben lassen. Dann kann ich meiner View ein Objekt von ILogic übergeben und kann somit die Logic jederzeit austauschen, sofern diese wieder ILogic implementiert." Du sagst allerdings, dass du gerne deine View trennen möchtest von deiner Logik (um sie ggf. austauschen zu können). Warum machst du sie dann abhängig von Logik? Bearbeitet 11. März 2020 von Defneqon Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheWorldDrown Geschrieben 11. März 2020 Autor Teilen Geschrieben 11. März 2020 vor 10 Minuten schrieb Memento: Ich rieche eine subtile Bitte zum Erledigen von Hausaufgaben. Zeig doch mal, wie du es lösen würdest. Ich bin mir sicher, dass hier niemand deine Hausaufgaben machen wird - aber genauso sicher ist, dass man Dir bei der eigenständigen Lösung helfen wird. Ich möchte noch ergänzen, das ich diesen Thread erstellt habe um ein Verständnis davon zu bekommen, wie man Abhängigkeiten trennt. Ich will weder das jemand, ein Projekt für mich codiert, noch irgendeine Hausaufgabe erledigt bekommen. Wie ich das ganze lösen würde, siehst du im ersten Post meines Threads. Das ein Administrator deinen Satz liked, finde ich ebenfalls mehr als fragwürdig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 Defneqon Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 Also hier mal ein kleiner Tipp, damit du in die richtige Richtung läufst: Deine View soll austauschbar sein. Sie ist also von nix abhängig. Genau wie deine Logik. Diese beiden Komponenten sollen nach Belieben austauschbar sein. Der Fehler ist also im Konstruktor zu suchen: Mache den View-Konstruktor bitte unabhängig von der Logik. Der Controller führt dann diese beiden Komponenten zusammen und stellt irgendwelche Dinge mit diesen an. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 TheWorldDrown Geschrieben 11. März 2020 Autor Teilen Geschrieben 11. März 2020 (bearbeitet) Wie ist es so... : public class Controller{ public IView View { get; set; } public ILogic Logic { get; set; } public Controller(IView view, ILogic logic) { this.View = view; this.Logic = logic; } } public class View :IView{ private Controller myController; public View(Controller controller) { this.myController = controller; ILogic logic = myController.Logic; } } Bearbeitet 11. März 2020 von TheWorldDrown Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
0 JimTheLion Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 Damit hast du das Sichtfeld nochmal ein Stück nach außen verschoben, bleiben wir beim ersten Beispiel. Public Class Controller(){ private IView myView; private ILogic myLogic; public Controller(){ myLogic = new AbcLogic(); myView = new View(myLogic); } } Public Class View() : IView{ private ILogic logic = null; //paar Klassenmember public View(ILogic myLogic){ this.logic = myLogic; } } Im Controller könnte myView eine beliebige Klasse mit dem Interface IView sein. Die Klasse View nimmt ein beliebiges Objekt einer Klasse mit dem Interface ILogic an, in diesem Beispiel AbcLogic. Für genaueres müsstest du dir sonst mal ein konkreteres Beispiel überlegen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-2 Memento Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 vor 10 Minuten schrieb TheWorldDrown: Kann mir jemand anhand meines Codebeispiels zeigen wie es richtig geht? Ich rieche eine subtile Bitte zum Erledigen von Hausaufgaben. Zeig doch mal, wie du es lösen würdest. Ich bin mir sicher, dass hier niemand deine Hausaufgaben machen wird - aber genauso sicher ist, dass man Dir bei der eigenständigen Lösung helfen wird. Thanks-and-Goodbye reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
-3 KeeperOfCoffee Geschrieben 11. März 2020 Teilen Geschrieben 11. März 2020 vor 4 Minuten schrieb TheWorldDrown: Ich will weder das jemand, ein Projekt für mich codiert, noch irgendeine Hausaufgabe erledigt bekommen. vor 30 Minuten schrieb TheWorldDrown: Kann mir jemand anhand meines Codebeispiels zeigen wie es richtig geht? Wäre Superklasse 💖 Dan hättest du evtl. nicht fragen sollen, dass man dir explizit für deinen Code ein "Beispiel" angibt. Memento reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Frage
TheWorldDrown
Bitte sagt mir, ob mein Vorgehen korrekt ist.
Möchte ich meine Logik von meiner GUI trennen, verfahre ich folgendermaßen:
Mein Controller, instanziiert ein Objekt der Klasse View und ein Objekt der Klasse Logik.
Meine View erhält im Konstruktor mein Objekt der Klasse Logik.
Somit habe ich keine Abhängigkeit zw. meiner View und meiner Logik.
Würde ich die Abstraktion noch weiter erhöhen wollen, kann ich der View ein Interface übergeben das meine Logik implementiert.
Ist das richtig? Ist das schon MVC Pattern?
Bearbeitet von TheWorldDrownLink zu diesem Kommentar
Auf anderen Seiten teilen
14 Antworten auf diese Frage
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.