2012-04-02 3 views
1

JavaScript в моем веб-приложении превратился в один огромный файл. Я хочу разбить его на модули, чтобы управлять ими было проще.Как разбить кодовую базу JavaScript на модули?

Я не знаю, существуют ли какие-либо установленные рекомендации для анатомирования кодовой базы веб-приложения или если это слишком сильно отличается от проекта к проекту?

В частности:

  • каждый модуль должен быть ответственным за приложение по всей концепции, такие как «расположение», или «хранилище» клиентскую, и т.д.?

  • или должны быть модули для концепций, специфичных для создаваемого приложения (например, «комментарии» или «календарь»), и каждый модуль несет ответственность за управление собственным макетом, собственным хранилищем клиентов и т. Д.?

  • или смесь обоих?

ответ

3

Если вы Separation of ConcernsSingle Responsibility и учитывать то каждый модуль/компонент и т.д., должны нести ответственность за не делать то, что она делает, и ничего другого. Разрушайте свои модули, перейдя на небольшие, простые в управлении куски, которые выполняют свою работу, и ничего больше.

С точки зрения вашего приложения JS вы можете взглянуть на некоторые рамки MVC на стороне клиента (например, нокаут, sproutcore, spine и т. Д., Чтобы назвать их несколько), эти фреймворки помогают логически разделить виды и макеты на контроллеры и моделей. Вам также может быть интересно использовать что-то вроде require.js для загрузки ваших модулей по мере необходимости.

There is a very good book by Alex McCaw который стоит прочитать.

MVC - это всего лишь один шаблон, но это очень популярный шаблон и затрагивает некоторые из проблем, которые у вас есть.

Удачи.

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^