Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Блочные шаблоны - архитектурная ошибка или норма? [RSS Feed]

#1 Июль 27, 2013 20:59:28

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

Добрый день, коллеги!

В процессе проектирования одного приложения (таск-трекер для внутреннего использования) столкнулся со следующей ситуацией..
Есть страница, на которой должен отображаться, к примеру, список задач, исходя из опреденных критериев.
У страницы есть определенная верстка, идентичная другим страницам и, собственно, контент. Это реализуется в шаблоне этой страницы. Но при этом, контент может быть совершенно разным, т.е. не получится просто в цикле вывести однотипные блоки, запросив данные. Например:
К задаче может быть прикреплено обсуждение, иллюстрация или что-то еще.
К задаче может быть прикреплен элемент, требующий повторного запроса к БД (например, график или диаграмма).
Задача может содержать в себе подзадачи, а может быть атомарной.
Т.е. речь о том, что шаблон не может знать, какие именно данные будут в очередном блоке.
Очевидное решение - написать шаблоны для каждого вида блоков, рендерить их по отдельности и возвращать html для их подстановки в общий шаблон. Возможно, что в некоторых ситуациях придется собирать блоки из блоков, которые, в свою очередь будут собираться из блоков и т.д. Трудно предсказать, как оно будет в реальной работе. Само собой, шаблон отдельного блока должен ограничивать эту вложенность, но она может присутствовать.
Потому как у меня нет опыта проектирования таких приложений, я не уверен, что подобное решение является правильным, т.к. породит огромное количество запросов к шаблонизатору, который, в свою очередь, будет читать с диска файлы с шаблонами и т.д. И вообще, довольно монструозно получается. Но альтернатива в виде логики в шаблонах гораздо хуже.
Вот и хотелось бы поинтересоваться у более опытных коллег - может быть есть какие-то другие решения данной проблемы, о которых я просто не знаю? И, может быть, вы порекомендуете шаблонизатор, который позволяет наиболее лаконично реализовать такой функционал?
Платформа для разработки пока не выбрана, но слой работы с данными уже реализован на MongoDB моим коллегой и неплохо работает. Поэтому выбор платформы ограничен теми, к которым можно прикрутить MongoDB без бубна и потери значительной части функциональности..

Большое спасибо всем, кто откликнется!

Офлайн

#2 Июль 28, 2013 16:54:50

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

В теории подключать блоки через include под условием не должно быть сильно громоздко, например блоки передавать списком в шаблонизаторе цикл по блокам и “вызов” нужного include.
Так же есть вариант отправлять страницу с основным контентом, а доп блоки подгружать через ajax.

А вообще вставлять html блоки в шаблон - иногда нормально, и это можно по разному реализовать, можно для этого расширить шаблонизатор.
Все зависит от нюансов.

Главное тут не делать сильно универсальное решение, а делать под задачу. А то у меня есть опыт компонентной системы с наследованием в html - тупиковый путь.

PS: какой фреймворк, шаблонизатор используете?

Офлайн

#3 Июль 28, 2013 23:25:18

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

Вот include с условием меня и пугает. Получается, что главный шаблон запрашивает у приложения данные о том, какой блок следующий и исходя из них делает include нужного блока.
Если уж все равно запрашивать данные - то не все ли равно, что возвращать - наименование блока или уже отрендеренный html? Зато при расширении приложения новым типом блоков, не нужно будет править основной шаблон. Т.е. не хочется размазывать этот функционал по всему приложению, а включать его только в одном месте.
Решение с AJAX не совсем честное. Т.к. по сути, мы все равно будет рендерить блоки по отдельности, только вместо шаблонизатора их будет собирать JS на клиенте. В остальном - разницы никакой.

Как я уже писал, с фреймворком и шаблонизатором не определились, у меня есть опыт работы с Django, но он не подходит по некоторым требованиям. Сейчас читаю доки по Pylons, пока не понимаю, подойдет ли он.

Понимаю, что есть опасность замахнуться на сверхуниверсальное решение и увязнуть. С другой стороны, хочется запустить приложение в работу с минимальным функционалом, а потом довешивать необходимое без переписывания основного кода. Нужно найти некий баланс и это непросто..

Офлайн

#4 Июль 29, 2013 05:47:04

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

А чем не нравится такой вариант - контролер отдает в шаблон список инициализированных блоков, а шаблон просто вызывает для каждого блока из списка render. Каждый блок имеет собственный шаблон. По такому принципу работают формы в Django, ToscaWidgets, да много где еще.



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Июль 29, 2013 09:57:36

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Блочные шаблоны - архитектурная ошибка или норма?

Некоторое время назад я понял, что эта проблема больше не существует, так как есть AngularJS, решающий все эти проблемы. Обычный шаблонизатор вообще не нужен в принципе.

P.S. Pylons? Pyramid!



Офлайн

#6 Июль 29, 2013 10:14:25

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

PooH
А чем не нравится такой вариант - контролер отдает в шаблон список инициализированных блоков, а шаблон просто вызывает для каждого блока из списка render. Каждый блок имеет собственный шаблон. По такому принципу работают формы в Django, ToscaWidgets, да много где еще.
Ну это тот же “html” только с сахаром.

Есть ещё вариант вставки блоков на лету web сервером, но это из области оптимизации.

ZZZ
Некоторое время назад я понял, что эта проблема больше не существует, так как есть AngularJS, решающий все эти проблемы. Обычный шаблонизатор вообще не нужен в принципе.
Вы про шаблонизацию на клиенте? (просто его вроде есть попытки применения его на сервере 8)
Тогда обратите внимание на Angular Light - облегченный AngularJS

Офлайн

#7 Июль 29, 2013 10:46:10

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

ZZZ
Некоторое время назад я понял, что эта проблема больше не существует, так как есть AngularJS, решающий все эти проблемы. Обычный шаблонизатор вообще не нужен в принципе.
Для сайтов все же лучше генерировать данные на сервере с помощью шаблонизаторов - поисковики не любят сайты, сделанные как web-приложения.
В данном случае, конечно, подойдет и AngularJS.

ZZZ
P.S. Pylons? Pyramid!
+1 за Пирамиду.



Офлайн

#8 Июль 29, 2013 11:04:01

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

o7412369815963
Ну это тот же “html” только с сахаром.
Тут есть один нюанс :D В этом случае логика остается в контролере, разметка остается в шаблонах



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#9 Июль 29, 2013 11:27:26

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

PooH
Тут есть один нюанс :D В этом случае логика остается в контролере, разметка остается в шаблонах
Я согласен что это лучше, я это и имел в виду когда писал “можно для этого расширить шаблонизатор.”
Хотя можно сделать просто вызовом ф-ии
{% render(block) %}

Офлайн

#10 Июль 29, 2013 11:29:52

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Блочные шаблоны - архитектурная ошибка или норма?

Хотелось бы про чудеса с AngularJS послушать



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

  • Начало
  • » Web
  • » Блочные шаблоны - архитектурная ошибка или норма?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version