Implementierung von Standard-Software-Design-Mustern (Fokus auf MVC) in R
-
12-12-2019 - |
Frage
Ich lese derzeit viel über Software-Engineering, Softwaredesign, Design-Muster usw., die aus einem völlig anderen Hintergrund kommen, das ist alles neue faszinierende Sachen für mich, also tragen Sie bitte bei mir, falls ich nicht die verwende korrekte technische Terminologie, um bestimmte Aspekte zu beschreiben; -)
Ich endete mit Referenzklassen (eine Art von OOP in R) meistens, weil die Objektorientierung die richtige Wahl für eine Menge der Dinge ist, die ich tue.
Jetzt habe ich mich gefragt, ob jemand einen guten Rat oder einige Erfahrungen in Bezug auf die Umsetzung des MVC (Modellansicht-Controller; auch bekannt als
Ich wäre auch sehr an Infos in Bezug auf andere "Standard-Design-Muster wie Beobachter , Blackboard usw., aber ich möchte dies nicht zu weit von einer Frage machen. Ich denke, das coolste Ding wäre, ein minimalem Beispielcode zu sehen, aber jeder Zeiger, "Schema", Diagramm oder andere Ideen wird auch sehr geschätzt!
Für diejenigen, die an ähnlichen Zeug interessiert sind, kann ich wirklich folgende Bücher empfehlen:
- .
- der pragmatische Programmierer
- Design Muster
- ist dies eine etwas korrekte Implementierung des MVC-Musters? Wenn nicht, was habe ich falsch gemacht?
- sollte "Verarbeitung" -Methoden (z. B. aggregierte Daten, Subsets usw.) für das Modell "Gehören" an das Modell oder die Controller-Klasse. Bisher habe ich immer alles definiert, was ein bestimmtes Objekt als Methoden dieses Sehrs tun kann.
- Sollte der Controller eine Art "Proxy" sein, die jede Interaktion zwischen Modell und Ansichten steuert, oder ist es nur für die Weitergabe des Benutzereintrags an das Modell (Sortieren von "Einweg"? < / li>
update 2012-03-12
Ich habe schließlich ein kleines Beispiel für meine Interpretation von MVC eingeführt (was nicht völlig korrekt ist; -)).
Paketabhängigkeiten
generasacodicetagpre.Klasse Definition Beobachter
generasacodicetagpre.Klassendefinitionsmodell
generasacodicetagpre.CLASSE Definition Controller und Ansichten
generasacodicetagpre.Klassendefinition zum Darstellen von Dummy-Daten
generasacodicetagpre.Instanzen erstellen
generasacodicetagpre.Untersuchen Sie Modellmerkmale und Beobachterzustand
generasacodicetagpre.Beachten Sie, dass die UID des Objekts bei der Initialisierung automatisch im Beobachter registriert wurde. Auf diese Weise können Controller / Ansichten Benachrichtigungen abonnieren und wir haben eine 1: n-Beziehung.
Ansichten und Controller instanziiere
generasacodicetagpre.abonnieren
Controller abonniert die Benachrichtigungen des zugrunde liegenden Modells
generasacodicetagpre.Beachten Sie, dass das Abonnement im Betrachter angemeldet ist
generasacodicetagpre.Display-Ansichten anzeigen
generasacodicetagpre.Es gibt auch ein Plot-Fenster, das geöffnet ist.
Modell ändern
generasacodicetagpre.Beachten Sie, dass beide registrierten Ansichten automatisch aktualisiert werden, da das zugrunde liegende Modell seine staatliche Änderung des Betrachters veröffentlicht, was wiederum alle Abonnenten (d. H., Controller) benachrichtigt.
Offene Fragen
Ich fühle mich hier, als wäre ich noch nicht ganz zu verstehen:
- .
Lösung
- .
-
Es sieht ziemlich gut aus, aber ich bin nicht so sicher, warum Sie einen Beobachter zusätzlich zu Ihren anderen Klassen haben (vielleicht können Sie mir sagen) Normalerweise ist der Controller ein Beobachter. Es ist eine wirklich gute Idee, dies in r zu tun, weil ich es in Java lernte, es war nicht so leicht zu verstehen (Java verbirgt einige der guten Teile)
-
Ja und Nein. Es gibt viele verschiedene Interpretationen dieses Musters. Ich habe gerne die Methoden im Objekt, ich würde sagen, dass es zum Modell gehört. Ein einfaches Beispiel wäre ein Sudoku-Solver, der die Lösungsschritte in einer GUI zeigt. Lassen Sie uns in ein paar Teile aufteilen, die in m, v und c unterteilt werden können Schritt wurde berechnet Ich würde es so einsetzen: M: Rohdaten + Sudoku-Funktionen, C: Wer sagt der GUI über Änderungen / das Modell über GUI-Eingänge, V: GUI ohne Logik Andere setzen die Sudoku-Funktion in den Controller, ist auch richtig und kann für einige Probleme besser funktionieren
-
Es ist möglich, einen "Einweg" -Controller, wie Sie es nennen, und der Ansicht ist ein Beobachter des Modells Es ist auch möglich, den Controller alles zu lassen, und Modell und Sicht wissen Sie nicht kennen (schauen Sie sich den Modelansicht Moderator an, das ist dabei)