Я создаю многостраничное javascript-приложение. Я много читал в шаблонах проектирования и создавал приложения, используя подход Core/Facade/Module w/free connection (pub/sub scribing to events).
У меня неплохая система, которая минимизирует и объединяет все мои файлы модулей и связанные с ними зависимости в один внешний файл javascript при развертывании. Минимизация дополнительных HTTP-запросов для моего приложения - это цель дизайна, поэтому я не слишком заинтересован в AMD (определение асинхронного модуля).
Я использую рекомендации, изложенные в презентации Николаса Закаса, Масштабируемая архитектура приложений JavaScript
http://www.youtube.com/watch?v=vXjVFPosQHw
& &
Addy Osmani Шаблоны для крупномасштабной архитектуры приложений JavaScript http://addyosmani.com/largescalejavascript/
& &
Этот премиальный учебник от Andrew Burgess от Nettuts, Написание модульного JavaScript http://marketplace.tutsplus.com/item/writing-modular-javascript/128103/?ref=addyosmani&ref=addyosmani&clickthrough_id=90060087&redirect_back=true
Мой вопрос - это советы о том, как управлять различными страницами этого приложения и связанными с ним модулями. Я также использую класс Backbonejs Router class w/ballupton History.js для управления API истории/состояния HTML5 и динамической загрузки страниц без обновления, в то время как поддерживая обратную совместимость для старых браузеров, которые не поддерживают API состояния HTML. Все мои страницы имеют общую базу кода (один миниатюрный и сжатый файл js).
Вот схема структуры, которую я собираюсь использовать в своем приложении:
Это, по сути, гибридный подход. Верхняя половина состоит из шаблона Core/Facade/Module с дискретными модулями, которые не взаимодействуют напрямую друг с другом и публикуют/подписываются на уведомления через фасад.
Нижняя половина состоит из моей предложенной структуры приложения, которая уведомляет "основного контроллера" при изменении состояния /url, главный контроллер выполняет любые глобальные операции (например, инициализацию заголовка и меню боковой панели моего пользовательского интерфейса, если не уже инициализирован), и инструктирует соответствующий субконтрол для запуска его init() (а также вызова destroy() на любом ранее загруженном контроллере). Каждый субконтроллер (соотносится с ex: домашней страницей, страницей календаря, оговоркой-страницей и т.д.) Вишни выбирает модули из пула доступных модулей и инициализирует их.
Является ли это хорошим подходом или я плохой трек? Я вижу, что модули по-прежнему независимы друг от друга, что хорошо для масштабируемости.
Я также рассматривал просто рассмотрение Router and Controllers как дискретных модулей и их публикацию/подписку на Core, и каждый контроллер каким-то образом инициализирует необходимые ему модули для этой страницы.