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 MVP : Modellansicht Moderator) Muster in R, vorzugsweise mit Referenzklassen .

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:

    .
  1. der pragmatische Programmierer
  2. Design Muster
  3. 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:

      .
    1. ist dies eine etwas korrekte Implementierung des MVC-Musters? Wenn nicht, was habe ich falsch gemacht?
    2. 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.
    3. 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>
War es hilfreich?

Lösung

    .
  1. 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)

  2. 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

  3. 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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top