Сергей Протько: если рассматривать на примере игр, то модель === игра. То есть, нужно проектировать модель так, чтобы в нее можно было играть без представления.
От сюда и появилось утверждение, что представление должно обновляться по событиям модели.
Если реакция пользователя не затрагивает модель, то представление разруливает все без контроллера. То есть, контроллер не всегда реагирует на событие клавиатуры и мыши.
Контроллер служит лишь для связи модели и представления.
Связанности никакой нет. Связанность это когда я передал в модель ссылку на представление и вызываю его "специфический" метод, предположим, myViewUpdate.
Теперь, если мне нужно будет поменять представление, то моя модель будет диктовать ему правила, навязывая метод myViewUpdate. А при событиях модели не нужно ничего знать об окружающем мире, она работает и шлет события, а вот кто их поймает, её не волнует. Сегодня это одно представление, завтра другое. Связанности нет.
После того, как поместили абстракцию в контроллере, следом придумали название для такой реализации - жирный и уродливый контроллер. Об этом на вики написано. И не важно в рельсах это или нет, законы ооп и mvc везде одинаковые. И усовершенствование, это когда на Вас доспехи одевают, а не выдергивают руки и прикрепляют на спину.
MVC декларирует разделение на логику представления, бизнес логику и связывающие это все контроллеры.
Что означает - бизнес логика ( что является логикой приложения ) отделить от логики представления и для связи их создать контроллер.
Это в свою очередь означает, что когда виду нужно будет получить данные из модели, он попросит контроллер взять их у модели и передать ему. Если модели нужно что-то приказать представлению, то он просит контроллер передать приказ виду.
Но в предложении после картинки из книги GoF явно говорится, что модель оповещает нужные ей представления ( посылает события ) после чего представления берут данные из модели ( это означает, что у представления есть ссылка на модель ). Для связи в классическом mvc контроллер не нужен. В книге он вообще упомянут лишь в вскользь.
Но тут многие скажут, что вид имеющий ссылку на модель нарушает принцип... Нет! Вид не работает с моделью и ссылку на него не имеет, он работает с абстракцией модели.
Мы уже раз по поводу mvc спорили и я прошу - больше не надо.
Не надо по тому, что я очень это люблю и могу говорить часами проповедуя свою версию, а не ту, которую знаете Вы! И я прочел много-много статей и книг, включая первоисточник правда на русском.
Спасибо Вам за ответ. А в СНГ часто заказывают приложения написанные на фраймворках?
Спасибо за ответ и объясните ещё вот какую вещь.
Почему очередь в событиях, это антипатерн?
Для примера, если взять обычный observer, то добавление
слушателей происходит в массив. При возникновении события
массив будет перебираться по порядку. Это уже антипатерн получается?
Или вот если я возьму и объектам задам приоритет, а затем
буду добавлять их в observer при помощи адаптера, в котором они,
эти объекты, будут сортироваться по приоритетам. Это по Вашему тоже антипатерн?
Юрий Пузыня: дело какое... Делаю для gulp который редактирует файл.
Структура такая, что поймав событие от gulp я хочу послать свое,
чтобы последовательно редактировать файл. Тут все просто, но есть
мнение, что если мое событие не будет синхронным, то какой-то другой
плагин может отредактировать файл в промежуток между моим изменением,
тем самым нарушит роботу моего плагина.
Слышал я что WebGL имеет ряд недостатков по сравнению с OpenGL у flash. И ходят слухи, что лагает canvas. Хотя не слухи, а говорят во всех темах, но я знаю по опыту, что есть люди у которых и flash лагает. И получается пока сам не попробовал не могу в открытую сказать о проблеме. Хотя у меня к сожалению не WebGL не OpenGL не поддерживается на ноуте и если первое вообще почти не работает, то второе прекрасно себя ведет.
Пока на as3 ( flash-air ) :)
Хочу расширить знания созданием вэб-приложений, так как первая причина
по которой я вообще начал изучать программирование, это красивые сайты,
а html5, я надеюсь, к тому времени, как я полностью постигну связку клиент-сервер, будет позволять делать в полной мере то, что душе угодно.
Ну а после, думаю полгода хватит на постижение общения сервера с приложением, пройдусь по haxe и c#. Языки очень родственные и я не думаю, что много время уйдет.
В общем, я пока только учусь, но приходится немного наговаривать, чтобы ответ получить. Результат сами видите. Но я и правда не мало уже знаю.
Чтобы было понятно, то я знаком с паттернами и парадигмами, работал с очень большим количеством фраймворках в других языка и не просто работал, а изучал их строение. Для меня не в новинку слова координаты и gpu. JS я учу уже три месяца и хочу сказать, что для меня было не просто понять прототипы после классов, но я это преодолел и наверное, мне js даже помог понять классы, в самом абстрактном их виде. Могу собрать desctop приложение, почти с закрытыми глазами, но вообще не знаю вэба.
Естественно я буду читать и читать, но этот вопрос я задал для того, чтобы встать на правильный путь.
Юрий Пузыня: Set и Map по в nodejs не поддерживаются..
Значит мне остается только переопределять toString и добавлять уникальное значение к возвращаемому значению.
Спасибо Вам за помощь!
От сюда и появилось утверждение, что представление должно обновляться по событиям модели.
Если реакция пользователя не затрагивает модель, то представление разруливает все без контроллера. То есть, контроллер не всегда реагирует на событие клавиатуры и мыши.
Контроллер служит лишь для связи модели и представления.
Связанности никакой нет. Связанность это когда я передал в модель ссылку на представление и вызываю его "специфический" метод, предположим, myViewUpdate.
Теперь, если мне нужно будет поменять представление, то моя модель будет диктовать ему правила, навязывая метод myViewUpdate. А при событиях модели не нужно ничего знать об окружающем мире, она работает и шлет события, а вот кто их поймает, её не волнует. Сегодня это одно представление, завтра другое. Связанности нет.