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.