вторник, 9 сентября 2008 г.

DRY

Пока это еще не работающий сайт, а развлечение, я всячески стараюсь следовать рекомендациям как писать красиво. DRY там и все дела. И заметил, что повторяюсь в коде вьюх:

<%= image_tag(get_photo_url(photo.file_path), {:alt => photo.title, :width =>photo.width, :height => photo.height} %>

Это просто выводит тег img для фотки. Так как фотку надо выводить в разных местах - аналогичный код повторяется. Тут photo это моделька фотки, а get_photo_url - метод хелпера.

Есть вариант сделать каждую вставку фотки в качестве render :partial => 'photo', :object => photo и вписать код выше в соответствующий partial (это я только что придумал. Про накладные расходы не знаю, но как-то слишком сложно. Не будем так делать).

Сначала я решил дать модели метод get_image_tag чтобы писать просто <%= photo.get_image_tag %>. Это потребовало подмешать в модели хелперы

include ActionView::Helpers::AssetTagHelper #предоставляющий image_tag
include ActionView::Helpers::TagHelper # нужный предыдущему
include ApplicationHelper # а тут мой get_photo_url

Ерунда какая-то. сомневаюсь, что модель должна заниматься такими вещами. Хотя код сокращается в итоге до <%= photo.get_image_tag %>

Правильная идея - добавить такие вещи как генераторы тегов в хелпер, как в фреймворке.
Тогда в модели нет мусора, а запись немногим сложнее: <%= get_image_tag photo %>.

Вот. А еще красивее чуть переписать настоящий image_tag и писать вообще <%= image_tag photo %>. Чего и вам желаю:)

Комментариев нет: