Теперь, когда вы познакомились с синтаксисом, самое время научиться созданию приложений на CoffeeScript. Эта глава будет полезна как начинающим, так и опытным CoffeeScript-разработчикам. Также в определённой степени она полезна и JavaScript-разработчикам.
Почему-то когда разработчик строит новое клиентское JavaScript-приложение, проверенные и протестированные паттерны и соглашения летят в мусорку, и в результате мы получаем спагетти из неподдерживаемого, неструктурированного кода. Я не могу передать то, насколько важна архитектура приложения; если вы пишете код, выходящий за рамки простой проверки данных из формы, то вам определённо надо реализовать какую-то архитектуру, например, MVC.
Секрет создания хорошо поддерживаемых крупных приложений заключается в том, что не надо создавать крупные приложения. Другими словами, разработайте несколько модульных компонентов, не связанных между собой. Делайте логику приложения настолько простой, насколько это возможно, абстрагируя её по мере необходимости. В конце концов, разделите логику на представления (views), модели (models) и контроллеры (controllers). Реализация паттерна MVC выходит за рамки этой книги, так что если вас интересует эта тема, то я советую свою книгу JavaScript Web Applications. Также советую использовать фреймворки наподобие Backbone. А в этой главе мы поговорим о структурировании приложений с помощью CommonJS-модулей.
Так что же такое CommonJS-модули? Если вы когда–либо использовали Node, то вы использовали и CommonJS-модули, возможно, не осознавая этого. Изначально CommonJS-модули были предназначены для создания server-side библиотек, избавленных от таких проблем, как чрезмерная нагрузка и ошибки области видимости. Они являлись своего рода стандартом, работающим на всех реализациях языка JavaScript. Целью было создать такую технологию, с помощью которой библиотека, написанная для Rhino, работала бы и на Node. В конце концов эти технологии перешли на сторону клиента, в результате чего появились такие библиотеки, как RequireJS и Yabble.
Вы можете подгружать другие модули и библиотеки с помощью require()
. Передайте название модуля и путь к нему (если требуется) в качестве аргумента, и функция вернёт объект, представляющий данный модуль. Например:
User = require("models/user")
[6]: