Ruby on Rails-Muster - Dekorateur gegen Moderator

112

In letzter Zeit wird in der Ruby on Rails-Community viel über Dekorateure und Moderatoren gesprochen.

Was ist der wesentliche Unterschied zwischen den beiden? Wenn ja, welche Hinweise sagen mir, welche ich über die anderen verwenden soll? Oder vielleicht, um die beiden zusammen zu benutzen?

Keruilin
quelle

Antworten:

102

Ein Dekorateur ist eher ein "Fügen wir dieser Entität einige Funktionen hinzu". Ein Moderator ist eher ein "Lassen Sie uns eine Brücke zwischen dem Modell / Backend und der Ansicht schlagen". Das Präsentatormuster hat mehrere Interpretationen.

Dekorateure sind allgemeine / allgemeine Zwecke. Moderatoren haben einen engeren Bereich von Verantwortlichkeiten / Verwendungszwecken. Dekoratoren werden domänenübergreifend verwendet, Präsentatoren beziehen sich fast immer auf ansichtsähnliche Funktionen.

Dave Newton
quelle
3
Vielen Dank. Draper Edelstein scheint eine Mischung aus Moderator und Dekorateur zu sein.
keruilin
17
@keruilin Eine Sache, die Sie beachten sollten: Dekorateure sollten wirklich in der Lage sein, andere Dekorateure zu dekorieren (sowie das Komponentenobjekt zu dekorieren), da einer ihrer Zwecke darin besteht, die Einschränkungen der Vererbung zu umgehen. (Draper macht das nicht ). Das Dekorationsmuster ist dem zusammengesetzten Muster in diesem Sinne sehr ähnlich, außer dass es von außen nach innen statt von innen nach außen gehandhabt wird (wenn dies sinnvoll ist).
Fleck
7
Ich sehe einen Dekorateur als Allzweckmuster und den Präsentator als eine spezifische Anwendung des Dekorateurs in Bezug auf die Ansichtsebene.
Kris
2
@Smudge, Draper-Dekorateure können andere Dekorationen dekorieren, zumindest so, als ob die zugrunde liegenden Modelle eine STI-Beziehung haben.
Keruilin
Es scheint, dass sich Draper jetzt als Präsentationsschicht-Wrapper identifiziert - es ist also kein Dekorateur mehr, sondern ein Präsentator. Aus ihrem GH: "Draper fügt Ihrer Rails-Anwendung eine objektorientierte Ebene der Präsentationslogik hinzu."
Jared
35

Ich empfehle Ihnen, dies zu überprüfen - Exhibit vs Presenter .

Decorator ist ein Entwurfsmuster, mit dem die Funktionalität eines bestimmten Objekts durch Umschließen erweitert wird, ohne dass andere Instanzen dieses Objekts betroffen sind. Im Allgemeinen ist das Dekorationsmuster ein Beispiel für das Öffnungs- / Schließprinzip (die Klasse ist für Änderungen geschlossen, aber für Erweiterungen verfügbar).

Sowohl das Ausstellungs- als auch das Präsentationsmuster sind eine Art Dekorationsmuster.

dpaluy
quelle
+1 für den Link zu diesem Blog-Beitrag von Mike Pack. Ausgezeichneter Beitrag, der die Unterschiede zwischen den Mustern erklärt.
Ki4jnq
+1 für die Erwähnung des Ausstellungsmusters. Am Ende bekam ich Avdi Grimms Buch, das es erklärt. Obwohl es nicht die richtige Lösung für mein Problem war, ist es immer noch ein erstaunliches Muster. Ausgezeichnete Denkanstöße.
Yonk