Modelli di Ruby on Rails - decoratore vs presentatore


112

Ultimamente si parla di tutti i tipi di decoratori e presentatori nella comunità di Ruby on Rails .

Qual è la differenza essenziale tra i due? Se c'è, quali sono gli indizi che mi dicono quale usare rispetto all'altro? O forse per usare i due insieme?

Risposte:


102

Un decoratore è più un "aggiungiamo alcune funzionalità a questa entità". Un presenter è più un "costruiamo un ponte tra il modello / backend e la vista". Lo schema del presentatore ha diverse interpretazioni.

I decoratori sono generici / generici. I relatori hanno una gamma più ristretta di responsabilità / usi. I decoratori vengono utilizzati in tutti i domini, i presentatori sono quasi sempre correlati a funzionalità simili alla visualizzazione.


3
Grazie. Sembra che la gemma di Draper sia un ibrido di presentatore e decoratore.
Keruilin

17
@keruilin Una cosa da tenere a mente: i decoratori dovrebbero davvero essere in grado di decorare altri decoratori (oltre a decorare l'oggetto componente), perché uno dei loro scopi è aggirare i limiti dell'ereditarietà. (Draper non lo fa). Il motivo del decoratore è molto simile al motivo composito in questo senso, tranne che viene gestito dall'esterno all'interno anziché dall'interno (se ha senso).
sfumare il

7
Vedo un decoratore come un modello di uso generale e un presentatore come un'applicazione specifica del decoratore correlato al livello di visualizzazione.
Kris

2
@Smudge, i decoratori di drappeggi possono decorare altri decori, almeno come se i modelli sottostanti avessero una relazione STI.
Keruilin

Sembra che ora Draper si identifichi come wrapper del livello di presentazione, quindi non è più un decoratore, ma in realtà un presentatore. Dal loro GH: "Draper aggiunge un livello di logica di presentazione orientato agli oggetti alla tua applicazione Rails."
Jared

35

Ti suggerisco di controllare questo - Exhibit vs Presenter .

Decorator è un design pattern che viene utilizzato per estendere la funzionalità di un oggetto specifico avvolgendolo, senza influire su altre istanze di quell'oggetto. In generale, il motivo decoratore è un esempio del principio apri / chiudi (la classe è chiusa per modifiche, ma disponibile per estensioni).

Sia i modelli della mostra che quelli del presentatore sono una sorta di motivo del decoratore.


+1 per il collegamento a quel post del blog di Mike Pack. Ottimo post che spiega le differenze tra gli schemi.
ki4jnq

+1 per aver menzionato il modello di esposizione. Ho finito per ottenere il libro di Avdi Grimm che lo spiega. Anche se non era la soluzione giusta per il mio problema, è comunque uno schema sorprendente. Ottimo spunto di riflessione.
Yonk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.