Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.03.2013, 18:39
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

Архитектура модульного приложение
Привет всем.
Есть много модулей, которые управляют определенными DOM елементами.
Все модули не знают друг о друге, работают они исключительно на событиях, которые генерят другие модули.

Пока логика всего приложения не сильно сложная, все просто.

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

Как вы решаете подобные проблемы ?
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2013, 19:27
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Я зарание описываю в определенном месте все ВИДЫ того на что можно подписываться. И логику поведения и работы с этим.


например есть событие - ввод текста
или - перенесли drag n drop файл


и логика каждого из таикх событий описана в самом событие, у этой ЛОГИКИ есть свой API а вот К КОТОРОМУ то и подключатся подули ПОДПИСЫВАЯСЬ на это событие.

суть такая что у модулей есть интерфейсы - входы и выходы, например есть вход text и выход text

если я пытаюсь подписать модуль на событие text (out) другого модуля, то все подпишется автоматически в нужный канал.. и API text (out) сразу подключится так как надо (потому что добавляя в модуль поддержку вход text и выход text я сделал в нем точки подключения API события text а ЛОГИКУ этого Api я описал в месте где описаны ВСЕ ВОЗМОЖНЫЕ события ВСЕХ модулей)

логика примерно понятна? я могу пример привести если надо)

Последний раз редактировалось megaupload, 15.03.2013 в 19:30.
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2013, 19:34
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

то есть тупо говоря те нужно в одном месте описать логик поведения интерфейса text

описываем

interfases.add('text', {api: {/*api*/}, /*логика*/});


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

modules.add(interfases:['text']);
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2013, 19:34
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

бля ну корчое вломы придумывать но если оч нужно то напишу)
Ответить с цитированием
  #5 (permalink)  
Старый 15.03.2013, 19:35
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

инкапсулируй короче логику поведения интерфейса (события) где нить один раз, и сделай этому интерфейсу точки подключения API К КОТОРЫМ потом прикручивай этот интерфейс (событие) в модулям через API


интерфейс будет описан один раз, например (text out) а использовать его смогут разные модули подключая его к себе через его API
Ответить с цитированием
  #6 (permalink)  
Старый 16.03.2013, 23:53
mue mue вне форума
Интересующийся
Отправить личное сообщение для mue Посмотреть профиль Найти все сообщения от mue
 
Регистрация: 15.11.2011
Сообщений: 24

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

К примеру, у нас есть событие, что пользователь выбрал дату в календаре, и календарь генерит событие с указание даты. Теперь если в этом событие установить логику, например сказать, что эта дата должна быть отображена на экране, значит событие жестко знает что есть модуль который может отображать дату. И в итоге мы связали календарь и модуль для отображения даты, чего пытались изначально избежать.

Или я не понял как работаеит твоя схема.

Можешь прислать какой-нить полноценный кусок кода посмотреть как все работает.
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2013, 00:31
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

бля короче роутер напиши и в роутер пихай все события и все их api, подписывая модуль на событие при подписке подключай api модуля к api события
Ответить с цитированием
  #8 (permalink)  
Старый 17.03.2013, 00:40
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

у тя так



а надо так



допустим приходит в сокет text в канал in какой нить текст

роутер смотрит кто у нас там может обрабатывтаь текст и кто на него подписан на его канал out и отдает текст ВСЕМ кто подписан




п.с. МНЕ ОБЯЗАТЕЛЬНО код писать? просто я щас занят изучением кое чего и пилкой портфолио)

Последний раз редактировалось megaupload, 17.03.2013 в 00:54.
Ответить с цитированием
  #9 (permalink)  
Старый 17.03.2013, 00:55
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

если ты отправляешь текст определенного типа

который должен рассылаться НЕ ВСЕМ модулям а только определенным которые могут обрабатывать ИМЕННО ТАКОЙ текст, то это значит что это не просто текст и это повод создать для него отдельный сокет) суть в том что если кто то ПОДПИСАН НА ТЕКСТ то ВСЕМ будет РАЗДАВАТЬСЯ ТЕКСТ и ВСЕ БУДУТ ЕГО ОБРАБАТЫВАТЬ.

то есть text и messageText


то ест НЕ НУЖНО делить сокет "text" на какие то подвиды текста... надо всегда создавать новые сокеты. чтобы было все чотко.

суть такова что модули ВООБЩЕ не должны ни чо знать друг о друге.. только о роутере.

Последний раз редактировалось megaupload, 17.03.2013 в 00:58.
Ответить с цитированием
  #10 (permalink)  
Старый 17.03.2013, 06:16
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

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

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
github. как правильно выложить приложение dmitry111 Оффтопик 120 20.01.2013 23:52
Как правильно спроектировать приложение? Alex Danilov ExtJS 7 22.05.2012 19:00
Проверить запущено ли приложение Wladimir Общие вопросы Javascript 1 23.08.2011 15:00
Приложение для мобильного браузера poorking Мобильный JavaScript 10 18.05.2011 17:23
Куплю cd диск приложение к книге Гудмана "Библия пользователя javascript"- 5-е издани Иваннн Javascript под браузер 4 19.06.2010 01:00