Как вы структурируете свои приложения Backbone + RequireJS?
Я изо всех сил пытался добиться правильного баланса между возможностью повторного использования и сложностью, когда дело доходило до организации объектов Backbone в AMD (для приложений среднего и крупного масштаба)
(A) Должен ли каждый объект Backbone (модели, представления и т.д.) находиться в своем собственном модуле?
(B) Должны ли связанные объекты Backbone находиться в одном модуле AMD? (то есть: PersonModel, PersonCollection, объекты PersonView в том же определении модуля)
Опция (A), по-видимому, обеспечивает максимальную гибкость и возможность повторного использования, но также и самую сложность из-за (потенциально) большого количества файлов. Хотя вариант (B) может упростить управление вещами, но менее гибким и действительно трудным для unit test.
Как (или есть) все остальные структурировали эти вещи?
Ответы
Ответ 1
Хорошая вещь о requirejs заключается в том, что она позволяет абстрагировать физические файлы в структурированные пространства имен. Вы можете принять подход (A) и создать каждый базовый класс в своем собственном файле, а затем создать модуль "пространства имен", чтобы склеить все связанные классы вместе.
// Suppose you have PersonView.js, PersonCollectionjs, PersonModel.js as modules
// create a Person module to function as namespace
define(["PersonModel", "PersonCollection", "PersonView"], function(model, collection, view) {
return {
Model: model,
Collection: collection,
View: view
};
});
Это блокирует модули в своих файлах и дает вам некоторую гибкость для записи одного модуля на класс, не требуя, чтобы вы открыли эту организацию для остальной части приложения (мне действительно не нравится писать require("PersonView", "PersonModel" ... )
каждый раз, когда мне нужно использовать объекты человека, проще и чище для потребителей объявлять зависимость от "пространства имен" вместо независимых классов).
Ответ 2
Для средних и крупных магистральных проектов я предпочитаю использовать requirejs с отдельным модулем для каждой модели, коллекции и представления. Я также использую плагин "Текст" для requirejs, поэтому я могу загружать шаблоны подчеркивания так же, как и любой другой модуль. Это для меня, кажется, самый надежный способ управлять крупным проектом, и я никогда не чувствовал себя переполненным количеством файлов, которые у меня есть.
+1 при использовании оптимизатора requirejs при нажатии вашего приложения на производство. Работает очень хорошо.
http://requirejs.org/docs/optimization.html
Ответ 3
Я только что выпустил инструментарий с открытым исходным кодом, который, надеюсь, поможет другим так же, как мне помогает. Это композиция из многих инструментов с открытым исходным кодом, которая дает вам рабочее приложение mainjesjs из коробки.
Он предоставляет единые команды для запуска: веб-сервер dev, одиночный тестовый бегун jasmine single browser, jasmine js-test-driver multi browser test runner и конкатенизацию/минимизацию для JavaScript и CSS. Он также выводит неограниченную версию вашего приложения для производственной отладки, предварительно скомпилирует ваши шаблоны руля и поддерживает интернационализацию.
Настройка не требуется. Он просто работает.
http://github.com/davidjnelson...