2014-05-23 2 views
2

Мартина Фаулера PoEAA catalog, как хранилище для Ruby Gems и Rails модулей, например ActiveRecord ORM из Rails основан на Фаулера ActiveRecord и DataMaper gem основан на Data Mapper pattern. Есть ли какие-либо полезные реализации Мартина Фаулера two-step view pattern в Ruby, например. в сочетании с движком шаблонов?Two Step View Pattern

+0

Возможно, примером является модель просмотра, реализованная [Draper] (https://github.com/drapergem/draper). –

ответ

0

Это новый образец для меня, но я могу два способа его концептуализировать. Ядро шаблона, по-видимому, сначала создает промежуточное представление, а затем запускает его на этапе форматирования. В каждом случае результат представляет собой представление, которое выглядит одинаково независимо от того, какой класс модели ActiveRecord отображается.

Вариант 1: Промежуточный рубин объект

Использование библиотеки Presenter (Draper, ActiveDecorator, roll-your-own), вы можете нормализовать несколько классов ActiveRecord в один публичный API. Затем вы пишете один шаблон представления, который может отображать объекты с этим API.

В этом случае вы создаете единый шаблон представления плюс один объект-презентатор для каждого класса ActiveRecord, который необходимо выполнить. Если вам нужно добавить новые данные на страницу, вам нужно коснуться шаблона и всех классов Presenter.

Вариант 2: HTML + CSS

Это странно, но я думаю, что HTML является допустимым форматом для представления данных, и может рассматриваться в качестве промежуточного, неформатированного представления.

В этом случае вы создаете шаблон вида (возможно, частичный, возможно, polymorphic) для каждого класса ActiveRecord, который производит (почти) идентичный HTML. Затем вы используете инфраструктуру компонента CSS для «форматирования» HTML в идентичные визуализации. HTML не обязательно должен быть строго идентичным, если все это соответствует тому, что ожидает инфраструктура вашего компонента. Добавление данных здесь означает изменение каждого шаблона представления (CSS обычно не нуждается в модификации).

Я думаю, что оба эти подхода действительны. Второй чувствует больше «рельсов-у» для меня, но я думаю, что это отход от духа шаблона, даже если он технически соответствует (что может быть спорным).

+0

Декораторы - это другой шаблон, и они противоречивы, потому что они добавляют дополнительную сложность (см., Например, http://thepugautomatic.com/2014/03/draper). Я искал своего рода механизм шаблонов, который соответствовал бы «Двухэтапному» View Pattern "(чтобы создать представление, состоящее из многоразовых, составных компонентов представления) – 0x4a6f4672

+0

Если вы ищете компоненты, ознакомьтесь с ячейками: http://cells.rubyforge.org. Это единственное, что я нашел, где-то рядом (но у него есть свои проблемы). –

1

Шаблон превращает данные домена в HTML в два этапа. Особенно интересно, если вы хотите составить свои представления в развязанные, повторно используемые компоненты просмотра.

Одним из возможных решений для реализации двухэтапного представления является XSLT transformation, например, с XML and Nokogiri. Это означает, что для создания промежуточного XML-представление страницы:

  1. XML == (XSLT) ==> XML
  2. XML == (XSLT) ==> HTML

Второй возможный решение заключается в использовании шаблона JS, например vue.js, KnockoutJS, Ractive.js или React. Rails делает первый шаг и создает промежуточный вид, шаблон двигателя JS второй:

  1. Rails шаблона == (Rails) ==> View-Template
  2. View-Template + JSON-данных = = (vue.js/KnockoutJS/Ractive.js/React) ==> HTML