LINUX.ORG.RU

Где место HTTP в паттернах MV*?

 , , ,


1

2

Здравствуйте

Прочитал вдохновляющую статью про разные виды MV*. Осталась пара незакрытых вопросов.

Для начала выдержка из статьи, описывающая ответственность PresentationModel в одноименном паттерне. PresentationModel:

  • Содержит логику пользовательского интерфейса: Так же, как и презентер, PresentationModel содержит логику пользовательского интерфейса. Когда вы нажимаете на кнопку, это событие направляется в PresentationModel, которая затем решает, что с ним делать.
  • Предоставляет данные из модели для отображения на экране PresentationModel может преобразовывать данные из модели так, чтобы они были легко отображены на экране. Часто информация, содержащаяся в модели, не может непосредственно использоваться на экране. Вам, возможно, сначала потребуется преобразовать данные, их дополнить или собрать из нескольких источников. Это наиболее вероятно, когда у вас нет полного контроля над моделью. Например, если вы получаете данные от сторонних веб-сервисов или же из базы данных существующего приложения.
  • Хранит состояние пользовательского интерфейса Зачастую пользовательский интерфейс должен хранить дополнительную информацию, которая не имеет ничего общего с моделью. Например, какой элемент выбран в данный момент на экране? Какие ошибки валидации произошли? PresentationModel может хранить эту информацию в свойствах.

Вопрос 1. Куда мне засунуть http-запросы? Например, веб-страница раз в секунду опрашивает сервер на предмет изменений. Где расположить этот setTimeout? В PrsentationModel? В Model? Где-то отдельно?

Вопрос 2. View-ов (и, соттветственно их презентаций) я так понимаю, может быть много? Например, по одному View на каждую форму. А что с моделью? Одна модель на всё приложение или по модели на каждый View?

★★★★★

Ответ на: комментарий от makoven

Можно, вообще говоря, считать, что в случае хттп мы имеем какой-то второй mv* паттерн вслед за первым. Для которой твоя модель станет уже вьюхой. И как у тебя был контроллер для вьюхи так же будет контроллер для этой модели (которая с другой стороны сама вьюха), он будет ловить события этой модели (например, как модель оповещает свою вьюху в mvc в случае активной модели, она так же может оповешать и этот контроллер) а сам контроллер как раз может передавать это событие в виде хттп запроса на твой бекенд. Как-то так.

Но это лишь один вариант организации.

anonymous
()
Ответ на: комментарий от anonymous

Можно, вообще говоря, считать, что в случае хттп мы имеем какой-то второй mv* паттерн вслед за первым. Для которой твоя модель станет уже вьюхой

Спасибо. Хорошая аналогия Понятно, что это уже не MVC, но аналогия хорошая )

makoven ★★★★★
() автор топика

Куда мне засунуть http-запросы?

HTTP - это протокол передачи данных между программами клиента и сервера в среде WWW. Соответственно, http-запросы и ответы должны формироваться где-то на границах ответственности этих сущностей, смотрящих друг на друга.

А что с моделью? Одна модель на всё приложение или по модели на каждый View?

Смотря что за модель. Есть модель данных приложения. Есть модели данных состояний элементов управления (виджетов) и самого View. Если все данные засунуть в один объект модели, то это исключит «лишние» уровни абстракций, приведёт к запутанным потокам данных внутри приложения («быстро и грязно»), возможно улучшит быстродействие, но ухудшит дальнейшее сопровождение и понимание логики работы сторонними товарищами.

iZEN ★★★★★
()

На вебе, особенно в браузере, как правило все укладывается в рамки одиночного выхлопа. Соответственно все изыскания тут.

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

Как правило, выхлопы (теоретически) связаны (условно) со следующими паттернами: command, action, facade, CS, interpreter, decorator, factory, builder, bridge, chain, mediator, proxy, adapter, strategy, service locator, DI и т.д.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.