Veröffentlicht 11. März 20205 j 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 20205 j von TheWorldDrown
11. März 20205 j 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 20205 j von TheGuy
11. März 20205 j 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.
11. März 20205 j Autor Kann mir jemand anhand meines Codebeispiels zeigen wie es richtig geht? Wäre Superklasse 💖
11. März 20205 j 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.
11. März 20205 j 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.
11. März 20205 j Autor 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 20205 j von TheWorldDrown
11. März 20205 j 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
11. März 20205 j Ah okay, jetzt weiß ich, was mit doppelt gemint ist. Hast Recht, sry. Nehme meinen vorlauten Beitrag zurück.
11. März 20205 j 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 20205 j von Defneqon
11. März 20205 j Autor 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.
11. März 20205 j 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.
11. März 20205 j 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.
11. März 20205 j Autor 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 20205 j von TheWorldDrown
11. März 20205 j 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.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.