Архитектура javascript приложений
Здравствуйте. Недавно посмотрел презентацию Scalable JavaScript Application Architecture. Тема очень заинтересовала.
Часто приходится писать некий javascript код ("костыли") под уже готовый сайт . Иногда это небольшие фрагменты, но бывает, что количество кода сильно разрастается. Поэтому хотелость бы узнать какие существуют методы/способы построения архитектуры javascript приложений. Хотелось бы весь этот код грамотно структурировать... Может кто-нибудь подсказать где можно ещё найти инфы по данной тематике, т.е. по архитектуре построения приложений на javascript. |
интересно, как та презентация связана с масштабируемостью... что же касается архитектуры, она важна в сложных, постоянно меняющихся проектах, над которыми работает не один программист. В большинстве же случаев достаточно не писать код как прийдется: не связывать компоненты между собой без необходимости; использовать "классы"; задумываться над тем, что этот код надо будет потом править, отделять вид от представления; выделять (extract) компоненты и т.д. Здесь, скорее всего в тему будет Рефакторинг Фаулера
Под классами имеется в виду нечто подобное, если что: function MyClass(){ ... } MyClass.prototype.method = function(){ ... }; но если очень интересует, могу попробовать подумать, вот только именно про js что-то ничего особо не вспоминается, ни книга, ни фреймворк (может не спроста?). Из общего, в голову приходят паттерны (хотя не все паттерны архитектурные, конечно же) и вспоминается книга Фаулера, которую я еще не читал. В качетсве вступления к паттернам могу порекомендовать вот эту книгу. Она не столько описывается сами паттерны, сколько рассказывает, каких их самому придумывать, по каким принципам они устроены. Правда значимость паттернов в книге имхо несколько переоценена. Хм, даже ссылку на русском нашел и еще вспоминается БЭМ, хотя это уже по поводу верстки. Вот только для каких проектов оно имеет смысл - я хз, но для яндекс - определенно имеет :) |
Про паттерны и JS можно почитать в JavaScript Patterns.
|
Спасибо за развёрнутый ответ. Использую классы, стараюсь применять, где это действительно необходимо, observer паттерн. Так же при изменинии интерфейса (html кода) реализую что-то типа MVC паттерна. Т.е. есть "модель" она же subject и есть представление - это части html интерфеса. И при возникновении событий в элементах эти события передаются в "модель".
В архитектуре, которая меня заинтересовала (по указанной выше ссылке) понравилась идея модулей и песочницы. Спасибо за предоставленные ссылки. |
Здравствуйте.
Тоже интерисуюсь этим вопросом, но немного по другой части. При таком способе построения архитектуры многие классы предстают в виде js-модулей. Т.е само понятие "класс" пропадает ( особенно, если в дополнение использовать, например, blackbone.js ). Вопрос: как можно это показать на диаграммах (например, UML) |
up
|
Цитата:
Цитата:
Цитата:
|
Спасибо за отклик.
Ну, взять тот же пример от azproduction (http://habrahabr.ru/blogs/javascript/123635/): var Module1 = { "init": function ($) { $.on('event', function (e) { // $ - не jQuery, это экземпляр sandbox console.log(e.data); }); } }; var Module2 = { "someAction": function ($) { // $ - не jQuery $.trigger('event', 'data'); } }; Каким образом я могу показать это на UML? Попробую предположить использование диаграммы компонентов, но ведь js-модули бывают совсем не большие и скорее подходят на замену классам, чем компонентам. |
lenok_sm, подход azproduction к модулям излишне усложнен.
если вам нужен какой-то функционал из другого файла просто подключайте его раньше вашего кода. "класс" - это шаблон обьекта [+ конструктор] модуль - это набор функционала. |
Цитата:
//инкапсуляция на основе замыкания (function() { //объект/класс/конструктор Class var Class = function(id) { this.id = id; }; //члены класса Class.prototype = { //свойство класса property : true, //метод калсса method : function() { return this.id; } }; //экземпляр класса var foo = new Class(10); // метод экземпляра класса foo.method(); }()); PS: UML и JS слишком уж утопично, как мне кажется только время впустую потратите. т.к. псевдокод будет неполным, а генерация кода практически бесперспективна.. Цитата:
|
Часовой пояс GMT +3, время: 09:07. |