Wzory Ruby on Rails - dekorator vs prezenter


112

Ostatnio w społeczności Ruby on Rails mówi się o dekoratorach i prezenterach.

Jaka jest zasadnicza różnica między nimi? Jeśli tak, jakie są wskazówki, które podpowiadają mi, którego użyć zamiast drugiego? A może użyć tych dwóch w połączeniu?

Odpowiedzi:


102

Dekorator to raczej „dodajmy jakąś funkcjonalność do tej jednostki”. Prezenter to raczej „zbudujmy pomost między modelem / zapleczem a widokiem”. Wzór prezentera ma kilka interpretacji.

Dekoratory mają charakter ogólny / ogólnego przeznaczenia. Prezenterzy mają węższy zakres obowiązków / zastosowań. Dekoratory są używane w różnych domenach, prezenterzy są prawie zawsze związani z funkcjami podobnymi do wyświetlania.


3
Dzięki. Wygląda na to, że Draper Gem to hybryda prezentera i dekoratora.
keruilin

17
@keruilin Jedna rzecz, o której należy pamiętać: dekoratorzy powinni naprawdę móc dekorować inne dekoratory (a także dekorować obiekt składowy), ponieważ jednym z ich celów jest obejście ograniczeń dziedziczenia. (Draper tego nie robi). W tym sensie wzór dekoratora jest bardzo podobny do wzoru złożonego, z wyjątkiem tego, że jest obsługiwany od zewnątrz do wewnątrz zamiast od wewnątrz (jeśli ma to sens).
rozmazywanie

7
Postrzegam dekorator jako wzorzec ogólnego przeznaczenia, a prezentera jako konkretne zastosowanie dekoratora związane z warstwą widoku.
Kris,

2
@Smudge, dekoratorzy draperów mogą dekorować inne dekoracje, przynajmniej tak, jakby podstawowe modele miały związek STI.
keruilin

Wygląda na to, że teraz Draper identyfikuje się jako opakowanie warstwy prezentacji - więc nie jest już dekoratorem, ale właściwie prezenterem. Z ich GH: "Draper dodaje obiektową warstwę logiki prezentacji do twojej aplikacji Railsowej."
Jared

35

Proponuję to sprawdzić - Wystawa kontra prezenter .

Dekorator to wzorzec projektowy, który służy do rozszerzania funkcjonalności określonego obiektu poprzez zawijanie go bez wpływu na inne wystąpienia tego obiektu. Ogólnie wzorzec dekoratora jest przykładem zasady otwórz / zamknij (klasa jest zamknięta dla modyfikacji, ale dostępna dla rozszerzeń).

Wzory eksponatu i prezentera są rodzajem wzoru dekoratora.


+1 za link do tego posta na blogu autorstwa Mike Pack. Znakomity post, który wyjaśnia różnice między wzorami.
ki4jnq

+1 za wzmiankę o wzorze ekspozycji. Skończyło się na tym, że dostałem książkę Avdiego Grimma, która to wyjaśnia. Chociaż nie było to dobre rozwiązanie mojego problemu, to wciąż jest niesamowity wzór. Doskonałe do przemyśleń.
Yonk
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.