Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 06.07.2012, 03:23
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Наблюдая за другими проектами, мне понравился способ, при котором страница, на которую пришел запрос, сама вытягивает нужные ей данные.
за какими именно проектами?

Сообщение от B~Vladi
Исходя из этого требования, становится понятно, что первый и третий варианты не подходят - придется дублировать агрегацию данных
для шаблонов и AJAX-запросов. В первом варианте шаблон сам агрегирует нужные ему данные. Во втором этим занимается отдельное приложение. А кто будет это делать для AJAX? Не круто.
неочевидно, приведи пример

Сообщение от B~Vladi
1. Шаблон напрямую обращается к источникам данных (базе, например).
2. Шаблон дергает некую ручку (приложение), которое обращается к данным, формирует их в нужном формате и возвращает.
3. Приложение (а не шаблон), получает нужные данные из источников и передаёт их одной пачкой в шаблон.
т.е. твой объединенный объединенный вариант - 3-ий вариант, который в зависимости от шаблона "получает нужные данные из источников и передаёт их одной пачкой в шаблон"? Так это чистый 3-ий вариант, получаемые данные определяются шаблоном в любом случае.

Сообщение от B~Vladi
Эмм, это уже лишнее. Всё-таки окружения разные, значит и код должен быть разным.
почему нет? Я слышал такой аргумент в пользу nodejs, собственно вот

Сообщение от B~Vladi
Если определение этих наборов переложить на контроллер - он будет сильно разрастаться. Поэтому я и разделил на несколько контроллеров и назвал их сервисы.
очень смутно представляю, что и как будет разрастаться...

я думал, ты на сервисы разбил в связи с ограничением количества одновременных запросов на домен. Ну т.е. по инерции, после статики (или они тоже отдельные сервисы?). Вообще создается впечатление, что роутер у тебя будет внешне-внутренним, в результате...

Сообщение от B~Vladi
Если такая терминология подходит, предлагаю переходить на неё. Если нет - объясни какие моменты считаешь нелогичными/непонятными.
вы какую-то свою терминологию (а может и реализацию) придумываете, вас трудно понимать. Самый распространенный вариант - контоллеры и экшены. Экшены - действия, контроллеры - группы действий. И url часто имеет вид: /[controller[/action[/id]]], например /users/delete/1 или /users

Сообщение от devote
Реализация у меня такова, кратко:
1. Шаблон, выступает в качестве client-side/virtual-client-side приложения, никак не связанного c View и ни с чем другим. Собственно он дергает ручки контролера.
2. Контролер, занимается перенаправлением требований от client-side и не более того, то-есть client-side дергает ручку контрола, контрол дергает нужную модель, на основе запроса.
3. модель, собственно занимается формированием данных, обработкой запросов и т.д. Формирует данные и отдает их уже выходному view.
4. View, собственно отвечает за то в каком виде отдать клиентской части данные, в формате JSON ( тоесть по запросу AJAX ) либо уже сформированное view представление.
Сообщение от devote
Разница в веб приложениях лишь в том, что нет прямой связи клиентской части приложения с серверной. Тоесть клиент получает выдачу того что нарулил сервер, в чем огромное отличие например в обычных приложениях, где есть прямая связь View с контролером без посредников.
подожди, ты сравниваешь веб- и десктопные приложения? B~Vladi тебя не об этом спрашивал. И меня этот вопрос тоже интересует (в чем отличие твоей реализации?), потому что я не вкурил её, реализацию...

DjDiablo, я все еще помню, что ты обещал помочь с тестированием разобраться :\

p.s. карма напомнила ситуацию в Зимбабве

Последний раз редактировалось x-yuri, 06.07.2012 в 03:55.
Ответить с цитированием
  #42 (permalink)  
Старый 06.07.2012, 10:10
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
за какими именно проектами?
Раньше мне попадалось что-то подобное, но сейчас не вспомню конкретно. Сейчас - Яндекс.Маркет, например. Хотя там нельзя сказать, что данные запрашиваются из шаблона, но и не из контроллера или ещё чего-то.

В любом случае это именно тот подход: "страница, на которую пришел запрос, сама вытягивает нужные ей данные."

Сообщение от x-yuri
неочевидно, приведи пример
В первом примере для генерации страницы агрегированием будет заниматься шаблон. Для AJAX-запросов какой-нибудь сервис/контроллер/как хотите.
Во втором примере вроде бы всё очевидно: для страницы данные формируются в одну пачку, для AJAX-запроса придется писать свой сервис/контроллер/как хотите

Сообщение от x-yuri
Так это чистый 3-ий вариант, получаемые данные определяются шаблоном в любом случае.
Ну не совсем. В третьем варианте контроллер обращается к источникам, а в объединенном дергаются ручки.

Сообщение от x-yuri
очень смутно представляю, что и как будет разрастаться...
Реализация получения данных в контроллере будет разрастаться.

Сообщение от x-yuri
почему нет?
Возможно в каких-то частных случаях - да (либа там какая-нибудь), а так нет. То же XSL-преобразование. API везде разное ==> разный код.

Сообщение от x-yuri
я думал, ты на сервисы разбил в связи с ограничением количества одновременных запросов на домен.
Не не, всё на один хост/порт уходит с клиента. А статика да, на разные. Но она отдается nginx-ом, так что в контексте разговора нам не интересна.

Сообщение от x-yuri
роутер у тебя будет внешне-внутренним, в результате...
Ну наверно, не до конца понял это определение. Предлагаешь делать по аналогии с express?

Сообщение от x-yuri
И url часто имеет вид: /[controller[/action[/id]]], например /users/delete/1 или /users
Ну он таким и будет. Только контроллер определяется до входа в логику. Т.е. запрос приходит напрямую в контроллер, а уже все экшены он разруливает сам.



Вообще, забудьте про "объединенный вариант". Сейчас я склоняюсь к модели, в которой шаблон будет асинхронно дергать ручки и обрабатывать от них ответ. Соответствующий шаблонизатор скоро научится это делать.

Сообщение от x-yuri
карма напомнила ситуацию в Зимбабве
Кстати, да, даешь инфляцию в интернетах!
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #43 (permalink)  
Старый 09.07.2012, 02:24
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Возможно в каких-то частных случаях - да (либа там какая-нибудь), а так нет. То же XSL-преобразование. API везде разное ==> разный код.
не вижу проблем в создании двух разных окружений для общего кода. Т.е. в любом случае будет код, который зависит от окружения, и будет не зависящий от окружения код. Насколько это оправдано... практика покажет...

Сообщение от B~Vladi
Ну наверно, не до конца понял это определение. Предлагаешь делать по аналогии с express?
я имел в виду, что может оказаться, что у тебя роутинг выполняется сначала с помощью nginx, а потом уже самим приложением, т.е. правила будут разбросаны по коду. Вообще все зависит от того, как это будет реализовано...

какие проблемы я вижу?

1) говрят, в процессе рендеринга шаблона, может выясниться, что другой блок надо перерендерить. Мне никаких конкретных примеров в голову не приходит.

Разве что несколько другой вариант, когда блок может потребовать подключить далее по тексту страницы нужные js-файлы или вставить нужный js-код (вариант, когда теги скрипт указаны перед </body>). Но это вроде решаемо.

Т.е. если обобщить: рендеринг блоков может влиять друг на друга, и должна быть возможность это как-то решать

2) как будут исключения/ошибки обрабатываться?

больше ничего не приходит в голову...

Теоретически, должно быть реализуемо и не сложно. Вопрос в том, в чем преимущества активного шаблона и когда его использовать. Возможно, для основного контента страницы больше подходит пассивный шаблон, а для дополнительных (меню, баннеры, и т.д.) - активный...

ну и не надо забывать, что есть POST (действие) и GET (вывод), т.е. не на каждый запрос надо рендерить шаблон.

Последний раз редактировалось x-yuri, 09.07.2012 в 11:04.
Ответить с цитированием
  #44 (permalink)  
Старый 09.07.2012, 12:18
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
Но это вроде решаемо.
Ну у меня решаемо.
Сообщение от x-yuri
как будут исключения/ошибки обрабатываться?
На каком уровне?
Сообщение от x-yuri
Вопрос в том, в чем преимущества активного шаблона и когда его использовать.
Преимущество я вижу в простоте поддержки таких страниц. Ну и данные будут запрашиваться только те, что требуются в конкретной ситуации, ничего лишнего.
Сообщение от x-yuri
Возможно, для основного контента страницы больше подходит пассивный шаблон, а для дополнительных (меню, баннеры, и т.д.) - активный...
Возможно. Остается найти такой шаблонизатор, который бы позволял рендерить шаблон в обоих режимах.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #45 (permalink)  
Старый 10.07.2012, 01:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

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

Сообщение от B~Vladi
На каком уровне?
вот и я о том же. Произошла ошибка при подключении какого-то блока в шаблоне. Как и где обработать эту ошибку?

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

Сообщение от B~Vladi
Возможно. Остается найти такой шаблонизатор, который бы позволял рендерить шаблон в обоих режимах.
php

Последний раз редактировалось x-yuri, 10.07.2012 в 01:52.
Ответить с цитированием
  #46 (permalink)  
Старый 10.07.2012, 09:33
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
php
как же я мог забыть об этом шаблонизаторе...

Раз уж речь пошла о шаблонизаторах, стоит говорить на примере какого-то конкретного. Предлагаю TSN, так как он будет использоваться у меня. Ну и в контексте NodeJS.

Сообщение от x-yuri
если шаблон будет напрямую обращаться к параметрам запроса, не нравится мне такой вариант
Чем?

Сообщение от x-yuri
Произошла ошибка при подключении какого-то блока в шаблоне. Как и где обработать эту ошибку?
Ну в любом случае это баг, его надо править. Отловить в контроллере это можно, отдав страницу 500 ну и с записью в лог, отправкой e-mail, sms, что угодно
Я считаю надо делать так.

Сообщение от x-yuri
Класс-вид, соответствующий шаблону, вполне может выполнять активные функции шаблона.
В этом случае при поддержке придется править и код класса и шаблон. Тогда как можно править только шаблон.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #47 (permalink)  
Старый 10.07.2012, 10:26
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Чем?
слишком много знать будет, шаблон

Сообщение от B~Vladi
Ну в любом случае это баг, его надо править. Отловить в контроллере это можно, отдав страницу 500 ну и с записью в лог, отправкой e-mail, sms, что угодно
а как насчет обработки ошибки в пределах блока? Т.е. если произошла ошибка при отображении блока, это не привело к тому, что вся страница не отобразилась

Сообщение от B~Vladi
Ну и данные будут запрашиваться только те, что требуются в конкретной ситуации, ничего лишнего.
кстати, откуда вообще берутся мысли про какие-то лишние данные в случае с пассивным шаблоном?

и расскажи подробнее, как происходит обработка запроса. А то я вот придумал ситуацию, но не знаю, возможно ли такое при твоем подходе: запускается рендеринг шаблона и когда дело доходит до основного контента выясняется, что 404 Not Found. Т.е. весь этот рендеринг выше был ненужным, чего хотелось бы избежать

Сообщение от B~Vladi
В этом случае при поддержке придется править и код класса и шаблон. Тогда как можно править только шаблон.
ну вот ты сам чуть выше рассказывал, почему ты придумал сервисы... Я не очень вкурил идею с сервисами, но зато с шаблонами вроде бы все очевидно: шаблон определяет как рендерятся данные (пассивная составляющая) и как получаются данные (активная). Для первого больше подходит язык разметки, для второго - язык программирования. Да, если шаблон небольшой - неплохо было бы объединить все в одном файле. Но с другой стороны это может мешать наследованию (шаблонов).
Ответить с цитированием
  #48 (permalink)  
Старый 10.07.2012, 11:34
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от x-yuri
слишком много знать будет, шаблон
Как бы да, но проблем я тут почему-то не вижу. Можешь привести пример, где это вызвало бы проблемы/неудобства?

Сообщение от x-yuri
а как насчет обработки ошибки в пределах блока? Т.е. если произошла ошибка при отображении блока, это не привело к тому, что вся страница не отобразилась
Полностью согласен, блок не должен показываться, но я пока не знаю как это решить у меня. Но решать как-то надо. Будем думать.

Сообщение от x-yuri
откуда вообще берутся мысли про какие-то лишние данные в случае с пассивным шаблоном?
Очень просто. Для пассивных шаблонов данные максимально соответствуют структуре представления. Если изменится view - нужно будет менять данные. Если будет несколько подобных view - либо для каждого агрегировать отдельный набор данных, либо использовать одни, но при этом может получится так, что для какого-то представления будут передаваться ненужные данные.
Ну и при поддержке нужно будет синхронизировать шаблон с логикой агрегации данных, а это лишний геморрой. Его не будет в активных шаблонах.

Сообщение от x-yuri
и расскажи подробнее, как происходит обработка запроса
На каком этапе(ах)?

Сообщение от x-yuri
А то я вот придумал ситуацию, но не знаю, возможно ли такое при твоем подходе: запускается рендеринг шаблона и когда дело доходит до основного контента выясняется, что 404 Not Found. Т.е. весь этот рендеринг выше был ненужным, чего хотелось бы избежать
Эта ситуация решена в примере: сначала рендерится основной контент. Если вдруг в этой части выясняется, что рендерить нечего - не рендерим. Основной шаблон, увидев что контента нет, выдаст содержимое страницы 404 из отдельного шаблона. При этом ничего лишнего отрендерено не будет.
Рядом можно посмотреть на примеры запросов данных, если интересно.

Сообщение от x-yuri
Для первого больше подходит язык разметки, для второго - язык программирования.
Согласен. У меня получится, что само получение данных инкапсулировано в коде, а из шаблона идет только вызов и обработка ответа. Получается всё на своих местах.

Сообщение от x-yuri
Но с другой стороны это может мешать наследованию (шаблонов).
Смотря как оно реализовано. Не могу представить такую ситуацию, может потому что у меня нет такого наследования, о котором ты говоришь.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 10.07.2012 в 11:41.
Ответить с цитированием
  #49 (permalink)  
Старый 10.07.2012, 22:32
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от B~Vladi
но я пока не знаю как это решить у меня. Но решать как-то надо. Будем думать.
Решено.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #50 (permalink)  
Старый 11.07.2012, 10:19
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от B~Vladi
Как бы да, но проблем я тут почему-то не вижу. Можешь привести пример, где это вызвало бы проблемы/неудобства?
пример не могу. Просто на мой взгляд, ты переносишь слишком много обязанностей на шаблон, повышаешь связанность. С точки зрения unit-тестирования это скорее всего тоже неудобно.

Сообщение от B~Vladi
Полностью согласен, блок не должен показываться, но я пока не знаю как это решить у меня. Но решать как-то надо. Будем думать.
Сообщение от B~Vladi
Решено.
как?

Сообщение от B~Vladi
Очень просто. Для пассивных шаблонов данные максимально соответствуют структуре представления. Если изменится view - нужно будет менять данные. Если будет несколько подобных view - либо для каждого агрегировать отдельный набор данных, либо использовать одни, но при этом может получится так, что для какого-то представления будут передаваться ненужные данные.
Ну и при поддержке нужно будет синхронизировать шаблон с логикой агрегации данных, а это лишний геморрой. Его не будет в активных шаблонах.
можно пример?

Сообщение от B~Vladi
На каком этапе(ах)?
ну например, приходит запрос. Он передается в сервис, а потом в экшн сервиса? Кто запускает рендеринг шаблона, сервис? Или экшен? Есть отличие между обработкой GET- и POST-запросов?

Сообщение от B~Vladi
Рядом можно посмотреть на примеры запросов данных, если интересно.
вот я и говорю, что ты переносишь часть кода в язык разметки. Т.е. код записывается отчасти с помощью языка разметки. А язык разметки неудобен для написания кода. И это не то же самое, что в php. В php код может быть внутри разметки.

Сообщение от B~Vladi
Согласен. У меня получится, что само получение данных инкапсулировано в коде, а из шаблона идет только вызов и обработка ответа. Получается всё на своих местах.
с некоторым перекосом в сторону активности шаблона

Сообщение от B~Vladi
Смотря как оно реализовано. Не могу представить такую ситуацию, может потому что у меня нет такого наследования, о котором ты говоришь.
да, потому что у тебя наследование недекларативное. Декларативность - проще и надежнее (сложнее сделать ошибку), но менее гибка, если это необходимо...

кстати, есть все-таки две вещи, которых немного не хватает в mustache...

Последний раз редактировалось x-yuri, 11.07.2012 в 10:22.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JavaScript client и server side игры Москва 110 000 Yanazavr Работа 0 25.03.2012 14:16
Помогите с архитектурой приложения epson Общие вопросы Javascript 6 09.02.2012 16:32
ВАКАНСИЯ:Сlient side developer СПБ ElenaJMK Работа 25 19.11.2010 16:24
ошибка XMLHttpRequest при запросе ис-под Isa Server poison jQuery 5 14.04.2010 13:38
Архитектура расширяемого приложения. DeveloperRu Библиотеки/Тулкиты/Фреймворки 2 16.03.2010 23:52