Я только начал разрабатывать приложение ExtJS, которое планирую поддерживать с помощью очень простой службы JSON PHP. Кроме этого, он будет автономным. Мой вопрос: какой лучший способ организовать файлы и классы, которые неизбежно возникнут? У любого есть опыт работы с крупными проектами ExtJS (несколько тысяч строк).
Я бы начал здесь http://blog.extjs.eu/know-how/writing-a-big-application-in-ext/
Этот сайт дает хороший вводный обзор того, как структурировать ваше приложение.
В настоящее время мы используем эти идеи в двух наших приложениях ASP.NET MVC / ExtJS.
При разработке приложения ваша структура файлов и папок не имеет особого значения, поскольку вы, вероятно, захотите свести к минимуму код выпуска и вставить его в один файл JS, когда закончите. Для этого лучше всего использовать автоматический скрипт или сценарий сборки (см. http://extjs.com/forum/showthread.php?t=44158 ).
Тем не менее, я где-то читал на форумах ExtJS, что один файл для каждого класса рекомендуется, и я могу подтвердить это на собственном опыте.
Я предлагаю, чтобы пользователи были готовы дождаться загрузки приложения, поэтому мы обычно загружаем все JS во время первоначального запуска приложения. Я предлагаю загружать и анализировать JS-файлы по мере необходимости, не нужно – особенно, когда все JS будут минимизированы до развертывания на производстве.
Я предлагаю имена, один класс для каждого файла и хорошо определенную и хорошо документированную иерархию классов.
При запуске нового крупного проекта я решил сделать его модульным. Обычно в больших проектах не все модули используются определенным пользователем, поэтому я загружаю их по требованию. Fe, если у проекта будет 50+ модулей, большая вероятность того, что пользователь работает только с 10-.
Такая архитектура позволяет сделать исходный код относительно небольшим.
Модули хранятся на сервере и загружаются вызовом AJAX, оценивая ответный текст в обратном вызове AJAX. Единственная проблема с этим, вы должны следить за зависимостями модулей, которые также могут храниться внутри модулей. У меня есть класс под названием Module, и я проверяю каждый экземпляр модуля для существования внутри задачи. Если он еще не существует, я загружаю его с сервера.