2013-08-08 3 views
5

Прямо сейчас я разрабатываю довольно огромный и сложный webapp и должен иметь дело с огромным количеством кода js на стороне клиента и облегчить мою жизнь. Я пытаюсь как можно больше отделить этот код как я могу.Разбор слишком сложных модулей javascript

Я был очень вдохновлен Николасом Закасом (http://www.youtube.com/watch?v=vXjVFPosQHw) и Адди Османи (http://addyosmani.com/largescalejavascript), рассказывая о масштабируемой архитектуре js и пытался применить некоторые свои идеи к моей работе.

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

Один из модулей, над которыми я работаю, представляет собой довольно сложную структуру списка. Вот некоторые упрощенный пример:

very simplified example

Помимо некоторого рендеринга логики, модуль, отвечающий за эту часть страницы должны обращаться:

  • пагинация
  • поворотных групп
  • движущиеся elems и группы вокруг с dnd
  • резка/копирование/склеивание элементов и групп
  • освежающего certaing группа/elems
  • некоторая логика в elems
  • может быть больше вещей в ближайшем будущем

Я провел весь неродственный логик, что я мог бы (например, редактирование и удаление логики осуществляю к другому модулю через события), но размер модуля по-прежнему большой (более 1 тыс. строк кода), и я не знаю, как уменьшить его. Более того, я использую шаблон модуля для своих модулей, поэтому еще сложнее разделить логику между несколькими файлами.

Итак, я пришел сюда, чтобы спросить, есть ли способ отделить сложную логику в рамках одного модуля?

UPDATE:

Я хочу уточнить кое-что. Я прекрасно понимаю, как я могу отделить модули («модуль» от шаблона модуля) через несколько файлов в моем коде.

Но то, что я действительно искал является нового логического способом отделить проблемы в рамках одного модуля («модуля» из НКЗ презентации).

+0

вы сомневаетесь, но в целом вы можете рассматривать модуль как программу, а внутри стен модуля вы можете создавать подмодули, классы, типы и чистые функции, чтобы помочь уменьшить беспорядок. автономные модули, как правило, относительно дороги из-за сокращения внутренней рециркуляции процедур; ex: автономный сортировщик списков по сравнению с плагином jQuery. Модули лучше, чем беспорядок, поэтому вы на правильном пути. Возможно, для освоения понятий «Инъекция зависимостей» и «Инверсия управления» необходимо перейти на следующий уровень. – dandavis

+0

Люди, интересующиеся этой темой, могут захотеть проверить [t3] (http://t3js.org/), систему JS, недавно выпущенную самим Николасом Закасом и его командой в Box, которая проистекает непосредственно из концепций, изложенных в презентации связанный в вопросе. [Здесь] (https://www.box.com/blog/introducing-t3-enabling-large-scale-javascript-applications/) сообщение в блоге от Zakas, представляющее его. – Nobita

+0

Привет, это немного поздно, но может быть полезно как-то. https://pogsdotnet.blogspot.sg/2017/07/modular-javascript-architecture.html –

ответ

1

Чтобы разъединить один модуль на несколько файлов, которые я рекомендовал бы использовать шаблон усиливающей найти на этой странице http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

Кроме того, здесь еще некоторые ресурсы на создание масштабируемого JS приложения:

Вот видео презентация Николаса Закаса «Создание масштабируемой архитектуры приложений JavaScript». http://www.youtube.com/watch?v=7BGvy-S-Iag

Еще один хороший ресурс http://addyosmani.com/largescalejavascript/

Зная эти понятия позволит вам создать приложение, которое способно уронить модули и бесшовно. Вы сможете изменить модуль, не затрагивая какой-либо другой модуль, потому что ваша программа будет слабо связана. Кроме того, если вы решите переключить базовую библиотеку, например KnockoutJS на Angular, эта структура позволит вам легко менять базовую библиотеку и не нарушать очень большую часть вашего кода.

Кроме того, использование модулей и медиатора или песочницы сделает ваш код более легким для тестирования. Тестирование важно в любом нетривиальном приложении. Надеюсь, это поможет!

+0

Спасибо @Spencer. Сначала я знал о шаблоне Augmention, но я предпочитаю держаться подальше от него, потому что, используя его, я не могу использовать некоторые особенности шаблона модуля. Например, я не могу иметь по-настоящему частную область для некоторых переменных и функций. Но, на самом деле, я не могу придумать лучшего решения для разделения модуля (из шаблона модуля) на несколько файлов. Во-вторых, я уже упомянул о подходе Николаса Закаса и Адди Османи к созданию масштабируемых js-приложений, и я уже использовал его. – panfil

+1

И последний. Нокаут или Угловая, конечно, облегчат мою жизнь. Немного. Но еще одна крутая рамка не решит проблему огромной концентрации логики в одном месте. – panfil

+0

Упс! Я пропустил ту часть, где вы сказали, что прочитали два источника, которые я предоставил! К сожалению, я не знаю, как лучше разделить модули на отдельные файлы, кроме использования шаблона дополнений. – Spencer

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