У меня есть несколько вопросов о программной архитектуре относительно перехода от Grails (REST-API, части AngularJS, MongoDB, Tomcat, Spock, несколько плагинов) до Node.js + Angular.js. Я, вероятно, должен объяснить структуру кулака проекта Grails, поэтому здесь мы идем:
Существует основное приложение Grails (рядом с несколькими другими приложениями), которое построено на нескольких плагинах. Каждый из этих плагинов может сам запускаться, что означает, что он имеет собственный пользовательский интерфейс, отдельные шаблоны, службы, контроллеры, маршруты, тесты и т.д. Он также размещается в разных хранилищах. Это делают механизмы плагинов Grails. Преимущества - это меньше усилий по тестированию, меньше времени компиляции, модуляции, отдельных обязанностей и т.д.
Но все же время для компиляции и тестирования слишком дорого. Также мне не нравится тот факт, что API предоставляет части шаблонов/представлений. Я бы хотел, чтобы API-интерфейсы backend были "только для поддержки API-интерфейсов" и интерфейсом "просто для того, чтобы быть интерфейсом". Таким образом, каждое приложение/плагин AngularJS предоставит свой собственный вид, маршруты, сервис и т.д. Но они также могут зависеть от других плагинов.
Так что я хотел бы добиться, так это:
- Одно из основных приложений AngularJS, которое включает в себя несколько плагинов (плагин может быть чем-то вроде генератора отчетов, гостевой книги или вообще, говоря о отдельной независимой части приложения, либо с определенным маршрутом, либо просто небольшой частью страницы).
- Каждый плагин должен быть автономным приложением AngularJS (возможно, исполняемым во время разработки через grunt или так). Чтобы разработчику пользовательского интерфейса не нужно было запускать все бэкэнд-приложение, кроме того, что мы можем запускать функциональные тесты только с помощью JavaScript
- Связь только через REST, интерфейс должен извлекать все данные из API
- Каждый плагин должен быть проверен сам по себе
- Плагин может потребовать работы других плагинов
- Основной файл index.html(и app.js?) может быть предоставлен сервером Nginx, который отделен от остальной части бэкэнд (API)
Хотя у меня есть определенная картина в моей голове, я борюсь за настройку этой архитектуры.
В Grails механизмы плагинов каким-то образом объединяют зависящие от плагина настройки (такие как сопоставления URL-адресов, зависимости и т.д.) к основному приложению, в которое они включаются/вводятся, - это то, чего я хочу достичь и с помощью AngularJS. Итак:
- Существуют ли какие-то механизмы для AngularJS?
- Как я могу предоставить/объединить маршруты каждого плагина в основное приложение?
- Как я могу объявить зависимости приложений и плагинов?
- Какие инструменты могут быть полезны для процесса сборки?
- Как установить ленивые извлечения плагинов-ресурсов (css/less файлы, представления, службы и т.д.)?
- Предотвратите приложение для предоставления всех ресурсов плагинов при запуске (я предполагаю, что маршруты необходимы при запуске).
Поскольку это не просто практический или этот вопрос, я извиняюсь, если мне не хватает важных частей или если некоторые части недостаточно ясны. Просто спросите меня, и я отвечу на каждый вопрос в глубине.