Javascript.RU

Интерфейсы. Прочь от MVC

Большинство сложных программных систем создаются с использованием паттерна MVC.

Многие программисты, приходя на javascript с других языков, по инерции используют этот подход.

Однако, при программировании javascript-интерфейса он зачастую бесполезен, приводит к тормозам, переусложнению приложений...

В javascript-интерфейсах, в отличие от Java/C++ и других - обычно не нужен паттерн MVC.

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

Модель (Model)
Собственно данные, методы для работы с данными, изменения и обновления данных.
Представление/Вид (View)
Отображение данных, оформление и другие аспекты презентации модели
Контроллер (Controller)
Реагирует на действия пользователя, интерпретирует данные, введенные пользователем, и информирует модель и производит необходимые манипуляции с моделью и видом.

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

MVC

Главный тезис статьи можно сформулировать так:

Controller пусть остается отдельно, а Model от View отделять не надо. Особенности Javascript/DOM/CSS позволяют успешно реализовывать аспекты Model средствами View.

Дальнейшая часть статьи - обоснование с примерами, почему именно так, а не иначе, и почему устоявшаяся практика MVC для javascript-интерфейсов работает плохо.

Никто не говорит о том, что MVC вообще - это плохо. Наоборот, MVC - это хорошо. Но вся штука в том, что при программировании для Web есть как минимум 3 важных особенности.

Паттерн MVC увеличивает количество кода за счет появления дополнительных межкомпонентных коммуникаций. То есть, не "сделай это", а "попроси компонент XXX сделать это и обеспечь его данными".

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

Javascript/DOM в браузере - не самая быстрая платформа, а приложения фактически являются real-time, т.е интерфейс должен реагировать и отображаться по возможности мгновенно, плавно, и не сильно жрать память.

Межкомпонентные коммуникации Model-View добавляют тормозов. Это повод их убрать.

Далее, и модель и вид в javascript, как правило, оперируют данными в одинаковом формате.

То есть, значение в форме input.value - не рисованный объект типа GraphicsTTFString, как это может быть в обычном десктоп-програмировании, не кодированная строка пикселей, а обычный текст.

Поэтому отделение Model от View приводит к излишнему дублированию данных.

Что такое View в javascript-интерфейсах?

Это в первую очередь DOM и CSS. Модель DOM заранее включает в себя следующее:

  • Хранение любых свойств:
    var div = document.createElement('div')
    div.myProperty = 123
    
    //..  и даже ... 
    div.myMethod = function() {
        alert(this.innerHTML)
    }
    
  • Древовидную иерархию - дерево элементов DOM
  • Средства поиска, выборки элементов. Наиболее известнен метод document.getElementById. Сложные CSS-селекторы и XPath постепенно приходят в браузеры, и успешно эмулируются JS-библиотеками.

При этом основные аспекты оформления задаются вообще отдельно от DOM, при помощи CSS.

Вы видите, DOM - это совсем не тот "классический" View, который обычно имеется в виду. Он гораздо мощнее.

Так зачем нам поддерживать иерархию, средства выборки и контейнеры для свойств в специальных javascript-объектах Модели, если с этим замечательно справляется DOM/View ?

Минусы, как и плюсы, связаны с производительностью.

При работе исключительно с javascript, работа идет в едином пространстве интерпретатора javascript. Это куда быстрее, чем обращаться к DOM-объектам, который в Microsoft относятся к COM, в Firefox - к XPCOM, в общем - живут отдельно от javascript-движка.

Эта проблема раньше была очень актуальна для Internet Explorer.

На момент написания статьи она фактически решена как библиотечными средствами (clobbering, учет и зачистка назначаемых DOM-элементам свойств), так и патчами.

В частности, как в IE7, так и в IE6 с обновлениями середины 2007 связка DOM-javascript почти не течет.

При разработке приложений надо смотреть, насколько тесно изменение ее модели (данных) завязано на изменение представления (DOM).

Если работа с объектом преимущественно не требует обновления внешнего вида, то можно подумать о выделении модели в целях производительности.

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

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

Современные js-фреймворки (YUI, dojo, jQuery) ликвидируют бОльшую часть утечек памяти.

Полностью впихивать Model во View, конечно, не обязательно. Да оно обычно и не нужно.

Можно выделить три устоявшихся практики.

Создается единый объект, который существует над компонентами интерфейса и хранит данные всех моделей, задействованных в данном интерфейсе.

Например, во вложенном меню это будет единый объект Menu, который умеет show/hide любые подменю. При этом подменю как таковое не является javascript-объектом.

Аналогично, в javascript-дереве это может быть единый объект Tree, который манипулирует узлами, а сами узлы - просто элементы DOM и хранят данные непосредственно в DOM.

Существует единый объект, который при небольшой "доинициализации" может выполнить роль любой из однотипных компонент интерфейса.

Например, рассмотрим контекстное меню для javascript-дерева, которое вызывается правым кликом мыши на элементе.

Вместо пачки меню - для каждого элемента дерева своё, создается единый объект ContextMenu.

При клике на узел:

  1. ContextMenu инициализуется нужным узлом
  2. В зависимости от узла и прав на этот узел включает-выключает пункты подменю
  3. Показывается на нужном месте экрана

Приспособление ContextMenu к конкретному элементу выполняется очень просто. В данном случае - не нужно создавать DOM-структуру меню, она и так есть. Не надо и создавать новый объект со своими методами - достаточно тех что есть.

Наконец, иногда целесообразно частично отделить некоторые аспекты Model от View.

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

В этой статье содержатся те мысли и подходы, которые отличают профессионального JS-программиста от обычного десктоп-кодера, подсевшего на javascript.

Их применение ведет к уменьшению и упрощению кода. Успехов.


Автор: hogart, дата: 28 мая, 2008 - 19:46
#permalink

Замечательная статья, хорошая и нужная.


Автор: tenshi, дата: 29 мая, 2008 - 15:13
#permalink

в мозилле используется этот flyweight.. тормозня страшная...
по каждому пункту меню происходит куча проверок и меню собирается в рилтайме.

ps: как меня заебали эти куки...

.ня


Автор: barbiturat, дата: 23 июня, 2008 - 12:27
#permalink

Для некоторых компонентов применение MVC, по моему, необходимо. Так, в свое время, мы делали виджет - аналог Exel'елевской таблицы, по ячейкам которой можно было бегать при помощи клавиатуры, а так же, совершать еще некоторые операции. Без применения MVC, мне кажется, этот код превратился бы в неудобоваримый киш-миш.


Автор: Илья Кантор, дата: 16 июля, 2008 - 14:30
#permalink

Да, но часть данных удобно держать именно не в M, а в V. То есть, держать информацию напрямую в DOM, а не в JS-объектах.


Автор: Rom (не зарегистрирован), дата: 17 июля, 2013 - 23:50
#permalink

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

Вобщем, исходите из задач.


Автор: freeman (не зарегистрирован), дата: 16 июля, 2008 - 12:27
#permalink

а как насчёт быстрого изменения движка под другой проэкт, (самой главной цэлью создания mvc является полная абстракция модэли контроллера и вида, вид не должен знать что происходит в модели) поэтому если нужно будет поменять дизайн придётся поработать)))


Автор: Илья Кантор, дата: 16 июля, 2008 - 14:31
#permalink

Если не предполагается сильно менять DOM, то здесь все ок.. Большая часть изменений интерфейсов обычно описывается CSS.


Автор: Kolyaj, дата: 1 сентября, 2008 - 10:41
#permalink

Абсолютно все то же самое можно написать о любом другом языке. Нафига в PHP использовать MVC, да и вообще разделение PHP и HTML, если они прекрасно уживаются вместе? А от MVC одни тормоза.

Низачет вообщем. Sad


Автор: Илья Кантор, дата: 10 сентября, 2008 - 11:47
#permalink

Kolyaj - а Вы прочитали статью? Там как бы все именно исходя из контекста Web..

В php все по-другому вообще. Это даже не десктоп, это сервер-программинг. Тут именно специфика JS/Web.


Автор: Armen Markossyan (не зарегистрирован), дата: 28 декабря, 2010 - 11:25
#permalink

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

MVC - это единственный правильный подход для php на данный момент. Он отделяет логику от источников данных и представлений. Имея подобное разделение кода, ваши проекты становятся значительно более расширяемыми, код становится упорядоченным и понятным для большинства программистов, работать в команде становится значительно проще. Без MVC очень сложно написать большой проект, чтобы потом его поддерживать, наращивать функционал и так далее.

Я не вижу ни одного случая, когда MVC будет хуже, чем спагетти из php, sql и html/css/js.


Автор: yks (не зарегистрирован), дата: 29 декабря, 2010 - 00:51
#permalink

А что вообще такое MVC?
Это абстракция, за которой в реальности стоит банальное разделение функционала, без которого не обходится ни одна программа. Утрированно,

alert("Hello")

- это тоже MVC, в которой alert- это view, "Hello" - это model, а контроллер - это вызывающий скрипт.
Поэтому с одной стороны соглашаясь с Вами, Armen Markossyan, о необходимости разделения источников и обработчиков данных (как актив-пассив в бухучёте ), и соглашаясь с тем, что статья, в общем-то, ни о чём, хочу сказать, что "единственный правильный подход" - это в корне неверная фраза, чем-то напоминающая о 1937 годе. Для каждого проекта нужен свой подход. (Извиняюсь, что это напоминает о другой фразе...)
В принципе, при грамотно поставленном процессе разработки такие вещи, как читаемость кода и скорость его выполнения, и так рассматриваются, и нужды заострять на этом внимание в отдельных статьях попросту нет. А если не рассматриваются, то ... RTFM


Автор: Armen Markossyan (не зарегистрирован), дата: 16 января, 2011 - 13:49
#permalink

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

Если вы собрались делать большой проект, то никто вам, конечно, не запретит придумать свой паттерн и правила, согласно которым будет все спроектировано. Это займет много времени и вам будут нужны действительно опытные программисты и "архитекторы", чтобы они ничего не упустили на этом важном этапе. А MVC - это уже почти общепринятый стандарт, из чего следует, что вам не придется учить новеньких программистов тому, как писать код, какие правила и ограничения на него накладываются, не придется изобретать велосипед и морочить себе голову, придумывая грамотную архитектуру. Порог вхождения в разработку вашего проекта становится ниже, что нельзя не считать большим плюсом.

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


Автор: Василий Д (не зарегистрирован), дата: 9 апреля, 2011 - 22:53
#permalink

>>alert("Hello")
>>- это тоже MVC, в которой alert- это view, "Hello" - это model, а контроллер - это вызывающий скрипт.

Спорно, alert - это команда контроллера к view, он сказал сделать alert, а как уже это сделает view его не интересует.

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


Автор: zaremba (не зарегистрирован), дата: 15 декабря, 2008 - 00:02
#permalink

Долой MVC - да, здравствует MVC.

DOM документа сама построена в соответсвие с MVC. Поэтому подгружая свои свойства иметоды к DOM мы все равно включаемся в этот паттерн. Существенным удобством такого подключения является возможность использовать this в событиях, привязанных к элементу. Естественным ограничением для использования такого подхода является сложность объектов. Для сложных объектов, изменение состояния которых затрагивает сразу несколько элементов DOM (например вышеупомянутые таблицы), естественно легче организовать модель в объектах JavaScript.


Автор: Константин Д (не зарегистрирован), дата: 3 мая, 2009 - 14:30
#permalink

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

Веб приложения имеют специфику - в частности, они "от рождения" имеют выделенный View и интегрированный в него Controller. Кстати: вариант, когда Контроллер интегрирован в Предствление, также является классическим MVC. В данной статье, думаю, автор подменяет понятия Модели неким Кэшем - как промежуточного элемента хранения данных полученных от Модели.
Я некоторое время занимаюсь проблемой MVC для javascript и думаю, специфика не позволяет применить десктоп-наработки в неадаптированном виде.
Но идея однозначно востребована. Основными требованиями считаю:
1) Необходимость иметь любое количество Представлений (в т.ч. параллельных) одной Модели.
2) Контроллер должен уметь обслуживать все Представления
3) Модель ничего не должна знать о Представлениях
4) Представление не имеет права влиять на Модель

В реализации Контроллер может быть или не быть медиатором между Моделью и Представлениями.
В любом случае главная задача это определение внятных контрактов между Моделью, Контроллером и Представлением.


Автор: Keltanas (не зарегистрирован), дата: 19 июня, 2009 - 11:14
#permalink

Аффтар, Вы не учли, что контроллер нужен не просто для связи модели и представления, а также для обработки данных между ними. А Вы так просто предлагаете его исключить. Тогда нафига нам нужен аякс? Давайте грузить сразу все возможные данные в js файлах...

Я бы понял еще объединение модели и контроллера, как обработчики данных ajax-запросов, но то, что Вы предлагаете - просто чудовищно.

И кстати я бы больше предпочел, чтобы некоторые данные обрабатывались все же не стороне клиента, чем на шаред-хостинге )))

В целом согласен с последними комментариями.


Автор: Митяй (не зарегистрирован), дата: 26 июня, 2009 - 04:13
#permalink

Тогда нафига нам нужен аякс? Давайте грузить сразу все возможные данные в js файлах...

ХА!
А реально, нафига Вам нужен аякс, когда данные точно известны и размер их с гулкин нос? Запихните в javascript hash их и будет всем счастье!
Оно конечно понятно, что когда в руках молоток все вокруг похоже на гвозди, но...


Автор: GueST (не зарегистрирован), дата: 13 июля, 2009 - 12:30
#permalink

Согласен - в статье речь идет о правильных вещах, но они в большнй степени касаются не совсем правильных фреймворков.

Все меняется в сфере вебпрограммирования, и очень быстро!

Считаю, что все сказанное здесь выше не относится к YII Framework...


Автор: Nick Pepper (не зарегистрирован), дата: 16 ноября, 2009 - 06:11
#permalink

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


Автор: Regent, дата: 21 ноября, 2009 - 23:22
#permalink

Люди, покажите код с использованием MVC и без него, пожалуйста)


Автор: artem-check (не зарегистрирован), дата: 18 апреля, 2010 - 02:25
#permalink

Бред! Чушь полная!
Искренне жалко юных девелоперов, которые проникнутся этой статьей Sad

Конкретно, где чушь:
1. В аспекте данной статьи - автор ВООБЩЕ не имеет практического понятия об MVC. Так, верхушех нахватал...
2. "Паттерн MVC увеличивает количество кода за счет появления дополнительных межкомпонентных коммуникаций" - если это происходит, следует немедленно уволить программиста! Ибо каменщик он, или фрезеровщик, но ни разу - не программист.
3. "Межкомпонентные коммуникации Model-View добавляют тормозов" - смешно. Здесь и далее по тексту - человек не имеет ни малейшего понятия в том, о чем говорит.


Автор: ps99 (не зарегистрирован), дата: 19 ноября, 2010 - 11:27
#permalink

Уважаемый, а Вы сами программируете на JS?


Автор: Гость (не зарегистрирован), дата: 8 июня, 2011 - 17:05
#permalink

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


Автор: Гость (не зарегистрирован), дата: 16 ноября, 2012 - 15:31
#permalink

сплошные эмоции
а аргументы где?


Автор: ascii88, дата: 18 апреля, 2013 - 14:38
#permalink

+1


Автор: Гость (не зарегистрирован), дата: 9 сентября, 2010 - 08:44
#permalink

Нормальная статья! Если че хранить надо, можно всегда в input hidden строке засунуть виде JSON. Особенно это хорошо работает с такими библиотеками как JQuery, MooTools и иже с ними.


Автор: monolithed, дата: 7 января, 2011 - 18:11
#permalink

Внесу свои 5 копеек по теме JavaScript MVC: http://javascriptmvc.com


Автор: Гость (не зарегистрирован), дата: 9 августа, 2011 - 06:24
#permalink

Стиль текста автора заставляет усомниться в опыте разработки на javascript.

Паттерн MVC увеличивает количество кода за счет появления дополнительных межкомпонентных коммуникаций. То есть, не "сделай это", а "попроси компонент XXX сделать это и обеспечь его данными".

Любой паттерн влияет на количество кода, но MVC за эту часть кода дает гибкость и поддерживаемость. Кстати, в рамках MVC в javascript, модель ничего не знает о контроллере, только о модели. Вот храните вы данные в верстке, представление поменялось раз, у вас добавились новые вычисляемые поля, часть старых скрылось (как предложили тут, стали hidden), потом еще и еще. После пятой итерации такая модель будет хуже представлений в MVC, а я считаю что представления — главное слабое место в MVC, там много избыточности, плохая связь с логикой приложения, и высока вероятность, что во время поддержки там будут дописывать код, вместо обновления старого добавляя лишние условия (if (false), ага).
Вы сами представляете что будет если в верстке хранить части логики, "если значение поля больше трех то ставить переключатель в положение 1" и при этом попытаться часть данных вынести сервис, часть вынести в модальное окно. Придется переписывать весь код, вместо внесения пары правок в модель и представление.
Ну, в общем, я не согласен со статьей. Начальная идея правильная, но выводы крайне странные.


Автор: Alex654 (не зарегистрирован), дата: 25 февраля, 2019 - 16:50
#permalink

>Вы сами представляете что будет если в верстке хранить части логики

Автор вроде бы такого и не предлагал. Да и как вообще возможно в вёрстке хранить логику? Как вы себе это представляете?


Автор: zz top (не зарегистрирован), дата: 4 декабря, 2011 - 03:57
#permalink

А если, чисто гипотетически предположить, что мы имеем дело с разработкой javascript приложения, которое в своей работе использует webworkers. Webworkers-объект ведь не знает, что такое DOM. Соответсвенно в данном случае модель может быть представлена только javascript-объектами, никак не DOM-объектами. И концепция, предложенная автором, уже не подходит для описанного случая. Просто размышление.


Автор: Гость (не зарегистрирован), дата: 23 апреля, 2012 - 10:52
#permalink

спасибо большое


Автор: flash (не зарегистрирован), дата: 15 мая, 2012 - 17:58
#permalink

А я поддерживаю автора в том, что такие вещи как роутер, контроллер - это черный ящик, и ошибку можно искать очень долго.
А если весь код написан без всяких шаблонов... то и баг найти гораздо быстрее!
Я бы сравнил MVC и ASP.NET
это как подобие макроязыка и обычного языка высокого уровня.
Где сейчас макроязыки? всем известно, что MS больше не развивает эту тему, ибо она тупиковая!
Так что asp.net без серверных контролов + js + c#
гораздо приятнее и удобнее!


Автор: Гуест (не зарегистрирован), дата: 21 июля, 2012 - 11:14
#permalink

В свете появления knockout.js рассуждения о MVC вызывают улыбку
Я серьезно, если кто-то еще не знаком с паттерном MVVC, попробуйте Knockout или его аналоги.


Автор: Гость (не зарегистрирован), дата: 18 июня, 2013 - 15:08
#permalink

И очень нужен нокаут для среднего сайта? Это сродни попыткам добавить классы в джиэс, когда там есть прототипы, с помощью которых и так все прекрасно строится.

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


Автор: Гость (не зарегистрирован), дата: 10 января, 2013 - 13:08
#permalink

Большое спасибо за информацию о Knockout!


Автор: Гость (не зарегистрирован), дата: 2 июля, 2013 - 23:13
#permalink

Помоему бред- я все коменты не читал - но точно знаю и скажу -

MVC - + XML(template)
+php mvc фреймворк

вот это нормально - а js придуман для других целей - подгрузка данных и т.п.

я например совмещаю PHP MVC + JS(JSON) -

джава скрипт подгружается именно тот и с тем контроллером что нужен - и скрипт джейсон обращается непосредственно к методам контроллеров.

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


Автор: Darklordis (не зарегистрирован), дата: 30 октября, 2013 - 23:35
#permalink

MVC используется в случаях: различных источников данных и одного их представления (редкий случай), одного источника данных и множества представлений (частый), а также если реализовано множество источников с множеством представлений (как MS Access например). В иных случаях использовать MVC глупо. Если у вас за один раз обрабатывается один запрос то оно вам к чему? " вас одна модель и одно представление + вырожденный контроллер.


Автор: rackel (не зарегистрирован), дата: 24 мая, 2022 - 14:10
#permalink

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post.
online farmhouse booking


Автор: raqy.style (не зарегистрирован), дата: 12 февраля, 2014 - 16:56
#permalink

Для всего свои задачи. В spa-приложениях сложно обойтись без mvc. В приложениях, в которых дом генерируется серверным приложением - можно и даже нужно. Иногда бывают сложные, реально сложные интерфейсы. В таком случае, лучше сложно обойтись без MVVM. Мне печально смотреть как трудяги пытаются выстроить, например, готовой фин отчет по департаментам, сотрудникам с разбивкой по датам, возможностью горизонтального/вертикального "сворачивания" таблиц и динамическим фильтрованием данных без ajax запросов только лишь с помощью jQuery. Это больно. В таким случаях сложно без mvvm.

имхо, для рекламной странички достаточно будет грамотного ванила-js.

и вообще, для многих javascript - это jQuery


Автор: Гость (не зарегистрирован), дата: 26 февраля, 2014 - 12:06
#permalink

Реализовывать MVC, когда представление идет по средствам DOM действительно (может быть) затратно. Приходится размывать границы модели и представления, что не оправдывает такой (MVC) подход; в последнем проекте весь интерфейс делали на canvas'е и MVC себя полностью оправдал, особенно с точки зрения того, что представление _полностью_ независимо от модели (клиенты часто хотят новые фичи интерфейса и смешивание модели и представления приводит к (почти) полному переписыванию некоторых частей).


Автор: Гость (не зарегистрирован), дата: 3 июля, 2016 - 04:08
#permalink

У меня обычно Model - это данные в формате JSON, которые приходят с сервера. Соответственно, контроллеры посылают AJAX запросы, получают результат и вызывают методы представлений с новыми параметрами для обновления интерфейса.


Автор: Audaxviator, дата: 24 июля, 2017 - 19:21
#permalink

Ст


Автор: Гость (не зарегистрирован), дата: 9 июня, 2018 - 17:18
#permalink

Использование таких штук как W3View позволяет забыть об особенностях View в браузере и работать с представлениями в любом стиле - хочешь MVC, хочешь MVVM, Flux, можно ещё что нибудь придумать, если надо

https://habr.com/post/348258/
https://habr.com/post/349866/


Автор: samuelddarden (не зарегистрирован), дата: 19 июля, 2019 - 02:13
#permalink

Thank you for providing detailed information about Interfaces Off MVC. watermelon gaming


Автор: Гостьd (не зарегистрирован), дата: 22 июня, 2020 - 11:50
#permalink

не самая быстрая платформа, а приложения фактически являются real-time, game 8 ball pool online.


Автор: nobita88, дата: 19 ноября, 2020 - 12:53
#permalink

Thank you for your post. I have read through some similar topics! However, your post gave me a very special impression, unlike other articles. I hope you continue to have valuable articles like these or more to share with everyone! shell shockers


Автор: shemales in nottingham (не зарегистрирован), дата: 9 августа, 2021 - 20:10
#permalink

For the best sexy chat in UK you must to visit shemales in nottingham


Автор: livesex cam (не зарегистрирован), дата: 14 сентября, 2021 - 18:58
#permalink

If you are looking for cam contacts in EU check out the best web platform right now livesex cam


Автор: Гость (не зарегистрирован), дата: 16 сентября, 2021 - 04:23
#permalink

Optimasi mesin pencari dengan metode white hat. Hanya ada di jasa seo profesional kami. Dapatkan penawaran terbaik sekarang.


Автор: sextreffen zürich (не зарегистрирован), дата: 8 ноября, 2021 - 09:54
#permalink

Spend some extratime and chat for free with hot sexy ladies on sextreffen zürich


Автор: antiguans2000, дата: 28 декабря, 2021 - 18:27
#permalink

In my case, Model is usually JSON data that comes from the server. Accordingly, the controllers send AJAX requests, receive the result, and call the view methods with the new parameters to update the interface.
!


Автор: antiguans2000, дата: 28 декабря, 2021 - 18:31
#permalink

Если работа с объектом преимущественно не требует обновления внешнего вида, то можно подумать о выделении модели в целях производительности.
.


Автор: James Linm (не зарегистрирован), дата: 28 декабря, 2021 - 18:32
#permalink

У меня обычно Model - это данные в формате JSON, которые приходят с сервера. Соответственно, контроллеры посылают AJAX запросы, получают результат и вызывают методы представлений с новыми параметрами для обновления интерфейса.


Автор: antiguans2000, дата: 8 января, 2022 - 12:57
#permalink

If the interface is deliberately simple (and will remain so), then unnecessary patterns are all the more unnecessary. view here


Автор: justicehwrknz807, дата: 9 января, 2022 - 14:09
#permalink

If you're looking for spray foam services in Saskatoon, do check out our website here. Visit us


Автор: soulmate1999, дата: 10 января, 2022 - 16:45
#permalink

Nice! Thank you for this wonderful and very informative post. Very Useful. www.atticinsulationcolumbia.com/


Автор: antiguans2000, дата: 11 января, 2022 - 16:50
#permalink

Thank you because you have been willing to share information with us. we will always appreciate all you have done here because I know you are very concerned with our. Read more


Автор: 토토사이트 (не зарегистрирован), дата: 12 января, 2022 - 12:33
#permalink

You made such an interesting piece to read, giving every subject enlightenment for us to gain knowledge. Thanks for sharing the such information with us to read this. 토토사이트


Автор: justicehwrknz807, дата: 12 января, 2022 - 17:11
#permalink

This is so interesting! I really appreciate it. You have a nice innovation. Thanks for posting! Painters in Germantown


Автор: johnsjvi95, дата: 13 января, 2022 - 17:22
#permalink

Really great share with a great bits of advice! I am thanking you for this share. We don't succeed in business just by finishing a list of tasks, we need this type of guidelines. This is really useful writeup, I am sure if we not focused on it, we will not be successful. See more


Автор: kanepan (не зарегистрирован), дата: 13 января, 2022 - 19:25
#permalink

What do you usually do during an epidemic season like this? smash karts is a wonderful game to play throughout the winter months that I recently discovered. Please come along with me right now.


Автор: antiguans2000, дата: 14 января, 2022 - 14:56
#permalink

I know your expertise on this. I must say we should have an online discussion on this. Writing only comments will close the discussion straight away! And will restrict the benefits from this information. Learn more


Автор: justicehwrknz807, дата: 15 января, 2022 - 16:23
#permalink

Thanks so much for this article. I love this type of information. call us


Автор: johnsjvi95, дата: 21 января, 2022 - 07:22
#permalink

This type of message always inspiring and I prefer to read quality content, so happy to find good place to many here in the post, the writing is just great, thanks for the post. view here


Автор: antiguans2000, дата: 22 января, 2022 - 16:33
#permalink

You really have a fun, intriguing, and interesting conversation. I like it. Please post more. Read more


Автор: soulmate1999, дата: 23 января, 2022 - 12:02
#permalink

Really appreciate this wonderful post that you have provided for us. Great site and a great topic as well. visit us


Автор: johnsjvi95, дата: 25 января, 2022 - 17:34
#permalink

Really informative blog. Really looking forward to read more. Great.
View here


Автор: justicehwrknz807, дата: 26 января, 2022 - 17:04
#permalink

Will there be another part to come on this topic? Baltimore Attic Insulation


Автор: antiguans2000, дата: 27 января, 2022 - 15:50
#permalink

I was reading some of your content on this website and I conceive this internet site is really informative ! Keep on putting up call us


Автор: Sexe Transexuelle Saint Etienne (не зарегистрирован), дата: 1 февраля, 2022 - 20:35
#permalink

Sexe Transexuelle Saint Etienne is web place with fine ladies ready for casual contacts with you


Автор: financial service advisor (не зарегистрирован), дата: 8 февраля, 2022 - 08:48
#permalink

Very interesting blog. Alot of blogs I see these days don't really provide anything that I'm interested in, but I'm most definately interested in this one. Just thought that I would post and let you know. financial service advisor


Автор: nujimka (не зарегистрирован), дата: 11 марта, 2022 - 10:58
#permalink

Thank you for sharing this information; it was quite helpful to me. driving directions mapquest


Автор: tipsmafia (не зарегистрирован), дата: 26 марта, 2022 - 10:01
#permalink

This is the right site for each person who should a couple of plans concerning this point. You see a particularly tremendous store of its essentially hitting to battle with you (not that I really would have to… HaHa). You undeniably put another turn concerning a matter which has been analyzed for an incredibly extended period of time. Shocking stuff, essentially puzzling!


Автор: tipsmafia (не зарегистрирован), дата: 26 марта, 2022 - 10:02
#permalink

This is the right site for each person who should a couple of plans concerning this point. You see a particularly tremendous store of its essentially hitting to battle with you (not that I really would have to… HaHa). You undeniably put another turn concerning a matter which has been analyzed for an incredibly extended period of time. Shocking stuff, essentially puzzling!1filmy4wap


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 03:56
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 02:58
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 12:03
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 14:20
#permalink

Автор: Bigg Boss 16 Online (не зарегистрирован), дата: 18 апреля, 2022 - 19:33
#permalink

Bigg Boss Ott 2 Watch Online
Watch Bigg Boss Ott Season 2 premier at Colors Tv Voot official app and website 24/7.
Salman Khan will host the show again and karan Johar will be the host of ott season 2.


Автор: Bigg Boss 16 Online (не зарегистрирован), дата: 18 апреля, 2022 - 19:33
#permalink

Bigg Boss Ott 2 Watch Online
Watch Bigg Boss Ott Season 2 premier at Colors Tv Voot official app and website 24/7.
Salman Khan will host the show again and karan Johar will be the host of ott season 2.


Автор: Yeh Rishta Kya Kehlata Hai (не зарегистрирован), дата: 30 апреля, 2022 - 00:23
#permalink

Yeh Jhuki Jhuki Si Nazar is an Indian Hindi language social drama tv serial.
The display stars Swati Rajput and Ankit Siwach in the important thing roles.
Yeh Rishta Kya Kehlata Hai Online


Автор: Daphne Connors (не зарегистрирован), дата: 24 мая, 2022 - 11:45
#permalink

Escort Ireland is one of the most famous dating sites where you can meet Irish escorts. By the way, here you will find not only women from Ireland who want to date but also from numerous other countries. You can register for free and once logged in you can immediately view the profiles of women who meet your criteria.


Автор: Anupama Watch (не зарегистрирован), дата: 23 июня, 2022 - 12:20
#permalink

The serial Anandi Baa Aur Emly is a Hindi language romantic and drama serial
television series that airs on Star Plus in India. Mishkat Verma, Shruti hasan

Anupama Watch Online


Автор: Гость (не зарегистрирован), дата: 6 июля, 2022 - 07:48
#permalink

You're right: I really got excited when I said that MVC, Klondike solitaire is the only correct approach, but it's worth noting that this pattern is universal and suitable for applications of almost any scale (be it web or desktop applications).

If you are going to do a big project, then, of course, no one will forbid you to come up with your own pattern and rules according to which everything will be designed. This will take a lot of time and you will need really experienced programmers and "architects" so that they do not miss anything at this important stage. And MVC is already almost a generally accepted standard, which means that you don’t have to teach new programmers how to write code, what are the rules and restrictions on it.


Автор: chunmin00 (не зарегистрирован), дата: 1 августа, 2022 - 11:10
#permalink

I find a lot of interesting information whenever I visit your website, which I do frequently. Not only are there some wonderful articles, but also some wonderful comments. I am grateful to you, and I hope that you will spread the word about my page. retro games


Автор: uses-and-treatment (не зарегистрирован), дата: 20 августа, 2022 - 08:00
#permalink

I just found this blog and have high hopes for it to continue. Keep up the great work, its hard to find good ones. I have added to my favorites. Thank You. uses-and-treatment-of-rick-simpson-oil-rso60-grams


Автор: Virtuel Escort Provence Alpes Cote Azur (не зарегистрирован), дата: 6 сентября, 2022 - 18:25
#permalink

Find hot girls from France for the hotest sexy contacts only on our web platform Virtuel Escort Provence Alpes Cote Azur


Автор: Гость (не зарегистрирован), дата: 7 сентября, 2022 - 12:16
#permalink

I really love reading your blog. It is very well drafted and easy to understand. Thanks very much! If you have more time, please visit: fireboy and watergirl


Автор: Scandal (не зарегистрирован), дата: 12 сентября, 2022 - 22:53
#permalink

Scandal
House of Zwide: Created by Eva Khumalo Banda. With Vusi Kunene, Winnie Ntshaba,
Noah Cohen, Lois de Plesis. When Ona, a young talented township girl who


Автор: keo nha cai (не зарегистрирован), дата: 13 сентября, 2022 - 05:40
#permalink

I've been troubled for several days with this topic. keo nha cai, But by chance looking at your post solved my problem! I will leave my blog, so when would you like to visit it?


Автор: Desi Tashan (не зарегистрирован), дата: 23 сентября, 2022 - 00:09
#permalink

Desi Tashan
Welcome to Yo Desi Tv Serials. We exhibit desi serial channels broadcast online.
Desi TV Serial that are loved by Hindi people around the world at Star Plus Voot.


Автор: 온라인카지노사이트 (не зарегистрирован), дата: 4 октября, 2022 - 07:36
#permalink

Really no matter if someone doesn't be aware of after that its up to other users that they will help, so here it takes place 온라인카지노사이트.


Автор: 해머캔디가격 (не зарегистрирован), дата: 11 октября, 2022 - 06:08
#permalink

I finally found what I was looking for! I'm so happy. 해머캔디가격 Your article is what I've been looking for for a long time. I'm happy to find you like this. Could you visit my website if you have time? I'm sure you'll find a post of interest that you'll find interesting.


Автор: 카지노사이트 (не зарегистрирован), дата: 16 октября, 2022 - 13:03
#permalink

This is the post I was looking for. I am very happy to read this article. If you have time, please come to my site 카지노사이트 and share your thoughts. Have a nice day.
fchgg


Автор: 바카라사이트추천 (не зарегистрирован), дата: 18 октября, 2022 - 13:15
#permalink

I’m not sure exactly why but this weblog is loading incredibly slow for me. Is anyone else having this problem or is it a problem on my end? I’ll check back later on and see if the problem still exists. 바카라사이트추천
fgtjhjk


Автор: retro game (не зарегистрирован), дата: 27 октября, 2022 - 06:55
#permalink

I would like to express my gratitude to you for sharing this excellent post. I have to say that I am very impressed with your post because the information provided is both comprehensive and simple to grasp. Your subsequent post will receive a lot of attention from me. retro bowl


Автор: 바카라게임사이트 (не зарегистрирован), дата: 27 октября, 2022 - 13:14
#permalink

I'm so happy to finally find a post with what I want. 바카라게임사이트 You have inspired me a lot. If you are satisfied, please visit my website and leave your feedback.
FGBHBH


Автор: Transexuelle Sexe Toulon (не зарегистрирован), дата: 31 октября, 2022 - 21:33
#permalink

Transexuelle Sexe Toulon is great for your own sexy chat contacts with hot girls in France


Автор: 온라인바카라 (не зарегистрирован), дата: 1 ноября, 2022 - 13:13
#permalink

I’m not sure exactly why but this weblog is loading incredibly slow for me. Is anyone else having this problem or is it a problem on my end? I’ll check back later on and see if the problem still exists. 온라인바카라


Автор: Transexuel Sex Reims (не зарегистрирован), дата: 8 ноября, 2022 - 20:41
#permalink

If you are alone you must to check out our web platform with fine ladies ready for casual contacts Transexuel Sex Reims


Автор: 바카라사이트추천 (не зарегистрирован), дата: 9 ноября, 2022 - 12:55
#permalink

That's a really impressive new idea! 바카라사이트추천 It touched me a lot. I would love to hear your opinion on my site. Please come to the site I run once and leave a comment. Thank you.
FHH


Автор: 中國人線上看 (не зарегистрирован), дата: 13 ноября, 2022 - 17:36
#permalink

清晰流暢, 操作界面簡單友好,真正為用戶帶來最舒適


Автор: Chinaq (не зарегистрирован), дата: 15 ноября, 2022 - 10:14
#permalink

牛寶軍,羅嘉良,張黎明,牛北壬,馬赫,周駿超,奚望,吳春怡,韓Chinaq超,奚望,


Автор: gimy (не зарегистрирован), дата: 15 ноября, 2022 - 10:44
#permalink

韓劇線上看,電影線上看,陸劇線上看, 日劇線上看, 美劇線上看,港劇線上看,Gimy電影,小鴨影音,momovod,HBO,愛奇藝 gimy


Автор: Dead Target Mod Apk (не зарегистрирован), дата: 15 ноября, 2022 - 11:26
#permalink

Автор: katha ankahee today episode (не зарегистрирован), дата: 16 ноября, 2022 - 18:54
#permalink

watch new Hindi Turkish drama serials in high quality full episodes . watch online Katha Ankahee today episode .


Автор: Loredana Brekelmans (не зарегистрирован), дата: 18 ноября, 2022 - 21:03
#permalink

Hobbyhoeren is een populaire datingsite voor volwassenen waar singles en swingers hun gevoelens voor elkaar kunnen verkennen en, als het goed gaat, een seksuele ontmoeting kunnen regelen.


Автор: 온라인카지노 (не зарегистрирован), дата: 20 ноября, 2022 - 13:15
#permalink

I finally found what I was looking for! I'm so happy. 온라인카지노 Your article is what I've been looking for for a long time. I'm happy to find you like this. Could you visit my website if you have time? I'm sure you'll find a post of interest that you'll find interesting.
fchhj


Автор: tindy (не зарегистрирован), дата: 21 ноября, 2022 - 06:12
#permalink

Just admire your work and wonder how you manage this blog so well. It's so remarkable that I can't help but come across this precious information whenever I surf the internet, thank you very much lol beans


Автор: 바카라사이트 (не зарегистрирован), дата: 21 ноября, 2022 - 06:16
#permalink

I am very impressed with your writing 바카라사이트 I couldn't think of this, but it's amazing! I wrote several posts similar to this one, but please come and see!


Автор: 온라인바카라 (не зарегистрирован), дата: 21 ноября, 2022 - 10:29
#permalink

Hello, I read the post well. 온라인바카라 It's a really interesting topic and it has helped me a lot. In fact, I also run a website with similar content to your posting. Please visit once
cxfgh


Автор: JamesLuke (не зарегистрирован), дата: 21 ноября, 2022 - 11:14
#permalink

We can share this in Indian Whatsapp Group Links to get experts response on this.


Автор: JamesLuke (не зарегистрирован), дата: 21 ноября, 2022 - 11:15
#permalink

Is there any one who can develop a creepy text generator or can provide me the JavaScript code for this?


Автор: 온라인카지노 (не зарегистрирован), дата: 26 ноября, 2022 - 13:09
#permalink

I finally found what I was looking for! I'm so happy. 온라인카지노 Your article is what I've been looking for for a long time. I'm happy to find you like this. Could you visit my website if you have time? I'm sure you'll find a post of interest that you'll find interesting.
FHHH


Автор: 온라인바카라 (не зарегистрирован), дата: 28 ноября, 2022 - 11:29
#permalink

Hello, I am one of the most impressed people in your article. 온라인바카라 I'm very curious about how you write such a good article. Are you an expert on this subject? I think so. Thank you again for allowing me to read these posts, and have a nice day today. Thank you.


Автор: 카지노사이트 (не зарегистрирован), дата: 29 ноября, 2022 - 06:27
#permalink

I've been searching for hours on this topic and finally found your post. 카지노사이트 , I have read your post and I am very impressed. We prefer your opinion and will visit this site frequently to refer to your opinion. When would you like to visit my site?


Автор: 카지노추천 (не зарегистрирован), дата: 29 ноября, 2022 - 09:51
#permalink

Hello, I read the post well. 카지노추천 It's a really interesting topic and it has helped me a lot. In fact, I also run a website with similar content to your posting. Please visit once


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 8 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum