Хороший принцип OO + MVC определенно будет иметь большое значение для управления сложным приложением javascript.
По сути, я систематизирую свое приложение и javascript со следующим знакомым дизайном (который существует еще со времен моего рабочего стола до Web 2.0)
Описание для числовых значений на изображении:
- Виджеты, представляющие взгляды моего приложения. Это должно быть расширяемым и аккуратно выделенным, что приведет к хорошему разделению, которого MVC пытается достичь, вместо того, чтобы превращать мой виджет в код спагетти (эквивалентно в веб-приложении для помещения большого блока Javascript непосредственно в HTML). Каждый виджет общается через других, слушая событие, сгенерированное другими виджетами, тем самым уменьшая сильную связь между виджетами, которая может привести к неуправляемому коду (помните день добавления onclick везде, указывающего на глобальные функции в теге сценария? Urgh ...)
- Объектные модели, представляющие данные, которые я хочу заполнить в виджетах и передавать туда и обратно на сервер. Инкапсулируя данные в свою модель, приложение становится независимым от формата данных. Например: хотя, естественно, в Javascript эти объектные модели в основном сериализуются и десериализуются в JSON, если каким-то образом сервер использует XML для связи, все, что мне нужно изменить, - это изменить уровень сериализации / десериализации и необязательно менять все классы виджетов. ,
- Классы контроллеров, которые управляют бизнес-логикой и взаимодействием с сервером + иногда уровень кэширования. Этот уровень управляет протоколом связи с сервером и помещает необходимые данные в объектные модели.
- Классы аккуратно обернуты в соответствующие им пространства имен. Я уверен, что мы все знаем, насколько неприятным может быть глобальное пространство имен в Javascript.
В прошлом я разделял файлы на свои собственные js и использовал обычную практику для создания принципов ОО в Javascript. Проблема, которую я вскоре обнаружил, состоит в том, что есть несколько способов написания JS OO, и это не обязательно, что у всех членов команды одинаковый подход. По мере того, как команда становилась все больше (в моем случае более 15 человек), это усложняется, так как нет стандартного подхода к объектно-ориентированному Javascript. В то же время я не хочу писать свою собственную структуру и повторять некоторые работы, которые, я уверен, умнее людей, чем я решил.
jQuery невероятно хорош как Javascript Framework, и мне это нравится, однако, по мере того, как проект становится больше, мне явно нужна дополнительная структура для моего веб-приложения, особенно для упрощения стандартизации практики ОО. Для себя после нескольких экспериментов нахожу, что YUI3 Base и Widget ( http://yuilibrary.com/yui/docs/widget/ и http://yuilibrary.com/yui/docs/base/index.html ) обеспечивает именно то, что мне нужно. Несколько причин, почему я их использую.
- Он обеспечивает поддержку пространства имен. Реальная потребность в ОО и аккуратной организации вашего кода
- Это поддерживает понятие классов и объектов
- Это дает стандартизированные средства для добавления переменных экземпляра в ваш класс
- Он поддерживает расширение класса аккуратно
- Предоставляет конструктор и деструктор
- Обеспечивает рендеринг и привязку событий
- Имеет базовую структуру виджетов
- Каждый виджет теперь может общаться друг с другом, используя стандартную модель, основанную на событиях.
- Что наиболее важно, он дает всем инженерам стандарт OO для разработки Javascript
Вопреки многим представлениям, мне не обязательно выбирать между jQuery и YUI3. Эти двое могут мирно сосуществовать. Хотя YUI3 предоставляет необходимый шаблон OO для моего сложного веб-приложения, jQuery по-прежнему предоставляет моей команде простую в использовании абстракцию JS, которую мы все любим и знакомы.
Используя YUI3, мне удалось создать шаблон MVC, разделив классы, расширяющие базу как модель, классы, расширяющие виджет как представление, и, конечно, у вас есть классы контроллеров, которые выполняют необходимую логику и вызовы на стороне сервера.
Виджет может общаться друг с другом, используя модель, основанную на событиях, и прослушивая событие и выполняя необходимую задачу на основе предопределенного интерфейса. Проще говоря, размещение структуры OO + MVC в JS является для меня радостью.
Просто отказ от ответственности, я не работаю на Yahoo! и просто архитектор, который пытается справиться с той же проблемой, что и исходный вопрос. Я думаю, что если кто-нибудь найдет эквивалентную структуру OO, это также сработает В принципе, этот вопрос относится и к другим технологиям. Слава Богу за всех людей, которые придумали OO Principles + MVC, чтобы сделать наши дни программирования более управляемыми.