Шаблони Ruby on Rails - декоратор проти ведучого


112

Останнім часом у спільноті Ruby on Rails про різного роду розмови про декораторів та презентаторів.

У чому суттєва різниця між ними? Якщо є, які підказки підказують мені, яку з них використовувати над іншою? Або, можливо, використовувати два разом у поєднанні?

Відповіді:


102

Декоратор - це більше "додамо деяку функціональність до цієї сутності". Презентатор - це більше "давайте побудуємо міст між моделлю / бекендом та переглядом". Шаблон ведучого має кілька інтерпретацій.

Декоратори мають загальне / загальне призначення. Презентатори мають більш вузький спектр обов'язків / застосувань. Декоратори використовуються в різних доменах, презентатори майже завжди пов'язані з функціональним виглядом.


3
Дякую. Схоже, що дорогоцінний камінь Draper - це гібрид ведучих та декораторів.
keruilin

17
@keruilin Одне, що потрібно пам’ятати: декоратори дійсно повинні мати можливість прикрашати інших декораторів (як і прикрашати предметний об’єкт), адже одна з їхніх цілей - обійти обмеження успадкування. (Дрейпер цього не робить). Візерунок декораторів дуже схожий на композитний візерунок у цьому сенсі, за винятком того, що обробляється ззовні, а не зсередини (якщо це має сенс).
мазання

7
Я бачу декоратор як шаблон загального призначення, а презентатор - як специфічне застосування декоратора, пов’язане із шаром подання.
Кріс

2
@Smudge, дизайнери драпірування можуть прикрашати інші прикраси, принаймні так, як якщо б основні моделі мають стосунки STI.
keruilin

Схоже, зараз Draper ідентифікує себе як обгортковий шар презентації - тож це вже не декоратор, а власне презентатор. З їх GH: "Draper додає об'єктно-орієнтований шар логіки презентації у вашу програму Rails."
Джаред

35

Я пропоную вам перевірити це - Exhibit vs Presenter .

Decorator - це модель дизайну, яка використовується для розширення функціональності конкретного об'єкта, загортаючи його, не впливаючи на інші екземпляри цього об’єкта. Загалом, шаблон декоратора є прикладом принципу відкриття / закриття (клас закритий для модифікацій, але доступний для розширень).

Як виставки, так і представники презентацій є своєрідним малюнком декораторів.


+1 за посилання Майка Пакету на повідомлення в блозі. Відмінний пост, який пояснює відмінності між моделями.
ki4jnq

+1 для згадування моделі виставки. Я в кінцевому підсумку отримав книгу Авді Грімм, яка пояснює це. Хоча це не було правильним рішенням моєї проблеми, все ж це дивовижна картина. Відмінна їжа для роздумів.
Йонк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.