Цитата:
Цитата:
var AutoComplete = new Class({ initialize: function( ArraySource|AjaxSource dataSource, CompleteList|BriefList list ){...} ... }); var ArraySource = new Class({ initialize: function( StartingWithStrategy|SearchAnywhereStrategy searchStrategy ){...} ... }); var AjaxSource = new Class({ initialize: function( StartingWithStrategy|SearchAnywhereStrategy searchStrategy ){...} ... }); Итого, семь классов. Что мы получили? Правильно, Hello, world! in patterns. И оно так же не легко в поддержке, как и в использовании. Да можно сделать это не таким расширяемым и оно станет проще. Но это не MVC и я не вижу причин разбивать этот автокомплит на модель-вид-контроллер. А вы? Цитата:
Цитата:
кроме того, ты уверен, что у тебя MVC, а не HtmlCssJs? Ведь можно сказать, для того же select, что модель там - пункты списка и какой из них текущий, вид - html+css, контроллер - js Цитата:
- Посмотрите, как просто в нашей программе сделать вот ЭТО! - Вау, прикольно, а как насчет вот такого? - А... Э... Ну, я вам потом расскажу... если захотите :) (ну это так, подумалось) da_ff (и не только), не обязательно подробно рассказывать реализацию. Просто пример привести. Например, связанные списки. Они не могут просто реагировать на изменение любого другого списка, потому что я добавлю третий список и обновляющийся список будет реагировать на события от двух списков. Т.е. должен быть какой-то код, специфичный для формы, который связывает списки. Надо сделать так? <pr:list id="list1"></pr:list> <pr:list link-with="list1"></pr:list> И чем это отличается от var list1 = new List(); new List({'link-with': list1}); просто другая форма записи Хотите Mediator? Пожалуйста, надо только дважды расширить list, придумать для них какое-то свое событие, один его будет отправлять, а второй слушать <pr:list-1></pr:list> <pr:list-linked-with-list-1></pr:list> ваши варианты? Panzermaus, интересно, т.е. у тебя И еще, я правильно понял, что виды не принимают уведомления напрямую от модели и контроллер не уведомляет виды о каждом отдельном изменении, потому что некоторое действие вызывает цепь изменений, а контроллер дожидается пока это все завершится и сообщает видам, что изменилось пакетом, а не про каждое изменение по отдельности? |
Отпуск. Продержался без компьютера целых четыре дня! :)
Цитата:
Цитата:
Цитата:
Цитата:
ИМХО, MVC не задумывался как эталон модульности и не является им (а в моем исполнении и подавно). MVC - это не ослабление связности, а ее сознательное перераспределение, если можно так выразится. Сознательно исключаются зависимости M от С и от Vs, а также Vs друг от друга, в то время как зависимости С от M, Vs от M, Vs от С остаются. Таким образом, только M можно считать модулем - ее можно перенести в другое приложение без переделок, и при этом она за собой не потянет других компонентов. C же тянет за собой M, а V - и M, и C (лично я ослаблять эти зависимости и не старался, поэтому компоненты общаются через интерфейсы, а не через события/подписку). Короче, MVC решает задачу модульности лишь отчасти. Цитата:
Цитата:
Цитата:
Цитата:
|
Panzermaus, ну что ж, похоже мы во мнениях сходимся :) Добавлю только немного
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
p.s. кстати, B~Vladi, советую исходить из практики, типа сделал ряд приложений по определенной схеме и получил фреймворк в качестве бонуса. Чтобы чувствовать эффект от принятых решений. Если это, конечно, не так |
x-yuri, с MVC пришли к консенсусу :) Даже по вопросу M/V/C vs. M/VC, что вдвойне приятно. Это на серверной стороне отдельные V/С уместны, так как там input и output естественным образом разделяются.
Цитата:
Цитата:
list2 = new List({'linked-with': list1}) , а скорее list2evt = new List({'filter-when': 'event1'}) . Кто является источником event1, сколько тех источников (и есть ли они) для list2evt все равно.Цитата:
Цитата:
Цитата:
Цитата:
А при взаимодействии через события количество компонентов хотя и увеличивается до 11, но зависимостей будет строго 10, причем зависимости исключительно однообразны и просты (подразумевается, что интерфейс диспетчера стабилен.) |
да и по поводу событий тоже сходимся во мнениях. Я может разве что больше делал упор на недостатки событий. Потому что ТС их как-то слишком превозносит. Т.е. уведомления от компонентов это хорошо, тем более что речь идет о библиотечных компонентах. Но компоненты, рассчитанные реагировать на события... я такого еще не видел, или не припоминаю. Во-первых, это навязывает наличие Mediator'а. Но даже если он предоставляется фреймворком, думаю, такой подход не всегда подойдет, скорее для простых случаев. А так, да, события бывают уместны, а бывают не уместны...
Цитата:
Или есть допустим схема с какими-то компонентами и модель. Модель обновляется и сообщает об этом компонентам. И тут я понимаю, что для какого-то компонента, нужно предыдущее состояние знать, а модель-то уже изменилась. Ну я сначала сделал еще одно событие beforeUpdate. А потом просто решил запоминать в компонентах нужную информацию (типа локальная модель). Ну т.е. можно считать, что совместил модель и компоненты, соотношение один-к-одному, так что нормально. Правда я к тому же до этого считал, что модель в DOM хранить можно (типа по состоянию DOM все нормально выясняется). Зачем еще дублировать в javascript-объекте? Оказалось лучше дублировать. Так вот в результате я получил более простое и понятное решение, чем с "большим MVC" и большим количеством событий |
Цитата:
Цитата:
Давайте ещё немного поговорим :) Начну с описания того, что у нас есть, а потом уже решим что с этим делать. А есть у нас тупо: 1. HTML в связке с CSS. 2. JS-код. Все-таки мы пишем приложение. Дальше я просто расскажу ход своих мыслей, посещающих меня во время создания архитектуры моего проекта. Так, есть куча функционала в ТЗ. Если я все это дело раскидаю на отдельные логические составляющие, мне будет проще ориентироваться по всему проекту, а значит и поддерживать его. Сначала я опишу каждую составляющую более абстрактно, без привязке к отображению или к чему либо ещё, на какой-нибудь тестовой страничке. В такой среде код сам будет писаться как самостоятельный модуль. Аха, мы получили первый модуль. Получили второй. Третий. Внутри у них четко определённый функционал, раскиданный по нужным полочкам. О внутреннем устройстве вскоре можно будет забыть, но сначала нужно определить способ воздействия на внешний мир. API может вытащить наружу? Нет, связывать модули мы не будем. Может медиатор? Может. Наблюдатель? Тоже вариант не плохой. А может нам объявить модули как модели, разметку как вид и реализовать для всего этого контроллер, превратив функционал всего проекта в одну классическую MVC-архитектуру? Хм... Это бы решило проблему с взаимодействием модулей... Но как? О, точно, у нас для этих целей уже давно придуман патерн Observer. Хорошо, он поможет нам реализовать синхронное взаимодействие контроллер <-> модель. Так. А что там у нас с видами? Задача контроллера - обновлять виды при изменениях состояний моделей. Прикроем-ка мы разметку классом вида и упростим общение с контроллером посредством, например, патерна Команда или того же API. Хм. В таком случае контроллер должен знать от кого в какой вид что посылать и поэтому может разрастись - моделей/видов-то много. Что-то больно тяжелый микс патернов получается, но вполне рабочий. Надо реализовать. Что мы ещё можем придумать? А можем сделать все намного проще, как я уже намекал выше... Есть наша куча модулей... Реализуем общение между ними при помощи медиатора или наблюдателя, а о разметке забудем навсегда. Тогда, для качественной разработки модулей необходимо разделять их внутреннее устройство на составляющие, например на M, V и C. Решение рабочее, будем реализовывать. Что получили в итоге. Самое интересное для нас - это модули. Мозг и логика всего приложения. Каждый кусок этого мозга влияет на все приложение в целом, а значит должно эффективно решать свои задачи. В первой реализации мы получили чистый функционал в коде модулей, без примесей. Во втором варианте же каждый сам за себя - плевать на все приложение в целом. Но не будет ли чистота первого варианта испорчена реализациями остальных компонентов - C и V? Вот это я и хочу проверить. Как что-то будет готовое - отпишу. |
ты нечетко выражаешь свои мысли, поэтому я и говорю, что лучше обсуждать на конкртном примере
|
Цитата:
|
читаю, вроде примерно понятно, но потом натыкаюсь на какую-то фразу и ломаю об нее голову... дай-ка попробую продемонстрировать
Цитата:
и в целом вроде похоже, что первый вариант - то, о чем я говорил, а второй вариант - твой. Так вот я не о том говорил, если что p.s. на всякий случай напомню, что вопроса в по сути два: как связывать компоненты и to MVC или не to MVC |
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Нет, просто так показалось. Посмотрим что выйдет. |
Часовой пояс GMT +3, время: 07:44. |