Должен ли я использовать ведущий или декоратор?

Я немного запутался в этих терминах, так как я новичок в мире Rails... У меня в заголовке есть код, не связанный с моделью. Я просто хочу показать это или нет, в зависимости от того, на какой странице находится пользователь. Я знаю, что это довольно просто, и помощники тоже справятся с этим довольно хорошо, но можно ли поместить код в презентатор или декоратор? Когда я должен их использовать? Я правда еще не понимаю.


person Edi Junior    schedule 10.06.2019    source источник


Ответы (1)


tl;dr: используйте Presenter в этом сценарии.

Уточнение. Декоратор – это структурный шаблон проектирования, который обертывает другие объекты и добавляет новые функции без необходимости расширения класса, который вы украшаете.

С другой стороны, Presenter должен использовать методы объекта, который вы представляете, для форматирования данных так, как вы хотите их показать. Например. у вас есть модель User:

class User < ActiveRecord:Base
  # it has first_name and last_name columns
end

и вы хотите представить полное имя без особой логики в представлениях. Вы можете создать класс UserPresenter следующим образом:

class UserPresenter
  def initialize(user)
    @user = user
  end

  def full_name
    "#{@user.last_name} #{@user.first_name}"
  end
end

Таким образом, вместо того, чтобы вызывать оба атрибута по отдельности, вы просто делаете это с помощью ведущего.

user = User.new(first_name: "John", last_name: "Doe")
user_presenter = UserPresenter.new(user)
user_presenter.full_name #=> "Doe John"
person Michael Kosyk    schedule 10.06.2019
comment
@EdiJunior - без проблем. Я настоятельно рекомендую немного изучить Ruby, прежде чем переходить к Ruby on Rails (распространенная ошибка многих молодых разработчиков — сначала изучить фреймворк, а затем язык). После этого возьмите книгу «Шаблоны проектирования в Ruby» Расса Олсена и послушайте Санди Мец на YouTube. Вы не пожалеете :) - person Michael Kosyk; 10.06.2019