Эпизод 145 подкаста SitePoint теперь доступен!
Скачать этот эпизод
Вы можете скачать этот эпизод в виде отдельного файла MP3. Вот ссылка:
-
Подкаст SitePoint № 145: Основы Bachbone.js с Адди Османи(MP3, 34:16, 32,9 МБ)
Резюме Эпизода
Луи беседует с Адди Османи ( @addyosmani ) о backbone.js.
Просмотрите полный список ссылок, указанных в шоу, по адресу http://delicious.com/sitepointpodcast/145 .
Стенограмма интервью
Луи: Здравствуйте и добро пожаловать в еще один эпизод подкаста SitePoint. Сегодня на шоу мой гость — Адди Османи, разработчик JavaScript на AOL; на многих конференциях он говорит о JavaScript и о разработке более крупных приложений на JavaScript и является автором нескольких книг. Привет, Адди.
Адди: Привет, приятно быть на вашем шоу.
Луи: Здорово иметь тебя. Итак, причина, побудившая меня обратиться к вам и попытаться заставить вас прийти на шоу, заключается в том, что вы недавно выпустили бесплатную книгу о Backbone.js, которая находится в процессе разработки, верно?
Адди: Да, это верно.
Луи: Итак, прежде чем мы углубимся в разговор о книге и о том, что побудило вас сделать такой проект, я бы хотел рассказать слушателям об истории Backbone. Итак, вы хотите немного рассказать о том, что такое Backbone.js и какую проблему он пытается решить, и почему люди захотят его использовать.
Адди: Абсолютно. Итак, идея Backbone Fundamentals — это книга, которая учит как начинающих, так и продвинутых разработчиков, как эффективно использовать Backbone для создания большего количества структур для приложений. Теперь, что это все значит? Что ж, когда вы начинаете строить с помощью App Stack, или нетривиально, или начинаете расти, вы узнаете, что, если у вас нет какой-то организации, вы столкнетесь с некоторыми проблемами. Какие проблемы? Ну, поддержание всего кода через приложения, скажем, файл, без использования каких-либо архитектурных шаблонов проектирования может означать, что в конечном итоге он будет немного похож на спагетти; это может выглядеть хорошо снаружи, это может быть приятно на вкус, но это беспорядок, чтобы убрать. Поэтому, когда вы ищете что-то более удобное для сопровождения, многие разработчики обнаруживают, что применение таких шаблонов, как MVC, обычно обозначающее Model View Controller, означает что-то немного отличающееся во внешнем интерфейсе и в JavaScript; это может помочь им сохранить свой код немного более организованным. Теперь Backbone — это одна из тех платформ, которая позволяет использовать разновидность MVC для четкого разделения задач и организации приложения. Он зрелый, невероятно легкий с учетом того, что вы получаете, и отлично подходит для одностраничных приложений и приложений с несколькими представлениями. Сейчас на рынке есть множество других решений, которые предлагают несколько разновидностей Backbone. На мой взгляд, сейчас это одно из самых элегантных решений. Разработчики, которые могли бы взглянуть на это и спросить, достаточно ли Backbone достаточно для использования в моем приложении большой корпоративной модели? в настоящее время его используют такие компании, как LinkedIn, Foursquare, Sound Cloud и многие другие крупные компании, разрабатывающие свои приложения. Теперь они не маленькие компании, и они не создают небольшие приложения, поэтому, надеюсь, если это будет достаточно хорошо для них, то, надеюсь, достаточно хорошо для остальных из нас.
Луи: Да, абсолютно. Недавно мы начали использовать Backbone на Flippa, я лично не много играл с ним, я больше работаю над бэкэндом, но я определенно слышал хорошие отзывы от нашего фронтэнда о его опыте. Но, может быть, я хочу немного отступить назад, вы говорили о MVC, так как он относится к JavaScript и инженерному обеспечению, и я понимаю, что, вероятно, много слушателей или много людей, которые занимались бэкенд-сетью разработка, вы знаете, MVC имеет смысл для этого, и я думаю, что большинству людей легко понять, почему вы хотите использовать MVC для чего-то вроде приложения, где вы имеете дело с взаимодействием с базой данных, которая является вашей моделью, и затем маршрутизация запросов, являющихся вашим контроллером, и шаблонов, но для чего-то, что полностью на внешнем интерфейсе, или на код приложения на внешнем интерфейсе, который находится в JavaScript, куда входит MVC и как он связан с внешним интерфейсом развитие?
Адди: Ну, во внешнем интерфейсе он переводится, в некоторых отношениях он почти идентично переводится в версию MVC на стороне сервера, а в других он сильно отличается. Я думаю, что представление и модели во внешнем интерфейсе очень похожи, как и во внутреннем, но когда вы начинаете говорить о контроллерах, это где-то, где многие JavaScript MVC-фреймы имеют тенденцию немного отличаться от того, что это должно быть. , Некоторые фреймворки, например Backbone, точно не имеют контроллера, а вместо части C в MVC он имеет вместо него маршрутизаторы, которые используются для управления навигацией; другие структуры рассматривают представление контроллера на переднем конце. И поэтому трудно дать конкретный ответ на этот вопрос, но каждая структура и каждый авторский шаблон структуры, как правило, имеют несколько разные взгляды на то, как это следует интерпретировать, но я думаю, что шаблон MVC или MVV, я склонен называть MVC на переднем конце MVV, что означает изменение вида модели. И я думаю, что этот шаблон по-прежнему хорошо транслируется во внешний интерфейс и помогает сохранить весь ваш код относительно хорошо организованным, даже если вы просто сохраняете концептуальные модели и представления и вынуждены переходить к чему-то еще внутри этого шаблона. ; это все еще имеет тенденцию работать довольно хорошо, по моему мнению.
Луи: Точно. Может быть, вы можете сделать это немного более конкретным в моем разуме и уме слушателя. Что является простым примером своего рода интерфейсного приложения, которое может извлечь выгоду из такого рода фреймворков?
Адди: Все, что я бы посчитал нетривиальным. Итак, допустим, у нас есть простое приложение для создания фотогалереи, которое, возможно, не использует единую парадигму приложения, и люди будут обновлять свою страницу каждый раз, когда они взаимодействуют с чем-то. Так что, если я нажму на миниатюру, чтобы просмотреть увеличенную версию изображения, я могу перейти на совершенно другую страницу, это может означать, что я делаю больше запросов http, мне нужно, чтобы пользователь ждал еще дольше чтобы загрузить, и в парадигме одностраничного приложения, которая, как правило, помогает людям с такими структурами, как Backbone, это означает, что нужно меньше кликов, чтобы все заработало, это означает, насколько быстро работает интерфейс, но с точки зрения организации вашего кода это означает что я могу аккуратно разбить различные компоненты, составляющие это приложение. Итак, мне ясно, что такое концепция фотографии в этом приложении? Что ж, я могу использовать модели, чтобы смоделировать данные вокруг этого и сказать, хорошо, ну, у фотографии может быть подпись, у фотографии может быть источник изображения, у нее могут быть некоторые дополнительные метаданные, хорошо, это концепция модели. Коллекция, которая есть у нас в Backbone, вероятно, представляет собой несколько разных моделей, поэтому это означает, что если у меня будет галерея, у меня будет несколько моделей, то есть несколько фотографий, в этой конкретной галерее. И мои взгляды могут, по сути, означать «хорошо», хорошо, что я на самом деле представляю конечному пользователю, я беру их со страницы индекса, которая может просто сказать, что делает приложение, и беру что-то, что может фактически позволить им пройти и просмотрите различные коллекции изображений, например, маршрутизация, возможно, будет использоваться для фактического переноса их с одной страницы на другую и предоставления им URL-адресов, очистки URL-адресов, если вы используете HTML5 PushState для простого использования хештегов для фактической навигации по приложению не заставляя их как бы обновлять страницу вообще.
Луи: Точно.
Адди: Так что это один пример.
Луи: Точно. Таким образом, в этом случае вы — своего рода фотомодель была бы обоснована, например, если я загружаю новую страницу, я получаю некоторый JSON с сервера, который содержит объектное представление этих фотографий в галерее, и вместо того, чтобы просто беспорядочно повторять их над ними во встроенном jQuery, я аккуратно объединяю их в объект модели, который затем будет проще использовать в других местах приложения.
Адди: Да.
Луи: И он ведет себя немного больше как серверное приложение, или как мы привыкли разрабатывать объектно-ориентированный код.
Адди: Точно, да. Итак, мы просто взглянули на пример приложения галереи, которое может быть реализовано с использованием Backbone и MVC. Теперь идея MVC на внешнем интерфейсе заключается в том, что он по-прежнему разделяет приложения на три основные проблемы. Прежде всего, у вас есть модели, которые управляют поведением данных приложения, и оно не сильно отличается от того, как обрабатываются данные, как модели обрабатываются на стороне сервера, они по-прежнему представляют собой знания и данные, на которые они по-прежнему реагируют. изменения состояния, но они, как правило, немного более изолированы от использования контроллеров, чем вы можете найти на стороне сервера. В таких средах, как Backbone, модели могут иногда группировать вещи и коллекции, поэтому у вас есть идея, что одна модель может представлять фотографию, но на самом деле коллекция в Backbone представляет несколько моделей или несколько фотографий. У вас могут быть представления, которые отвечают за сортировку моделей в форму, подходящую для взаимодействия с пользователем. Во многих случаях во внешнем интерфейсе ваши представления будут рассматриваться как ваш пользовательский интерфейс, они обычно отображаются в определенных элементах пользовательского интерфейса, поэтому у меня может быть div на странице, на который я на самом деле хочу представить свое представление, и это Можно назвать контейнером или чем-то еще, и я просто сделаю так, что независимо от того, использую я для этого библиотеку шаблонов или использую собственный внутренний материал Backbone, я просто собираюсь отображать это представление для определенного элемента. И у вас может быть несколько видов, которые предназначены только для отдельных моделей, поэтому у вас могут быть модели, представляющие фотографии в ваших приложениях, и у вас могут быть виды, которые, возможно, отображают различные аспекты этой модели. Итак, если у меня есть фотография, на которой есть метаданные, говорящие, вы знаете, ну, эта фотография была сделана, скажем, в Италии, например, эта фотография была сделана в 1990 году, там были Том, Дик и Гарри; у вас может быть один вид, который на самом деле показывает вам людей, которые были рядом, когда была сделана эта фотография, у вас может быть другой вид, который представляет место, где была сделана эта фотография, и, возможно, показывает вам карту, и так далее, и так далее. Затем у вас есть своего рода контроллеры на передней панели. Теперь, когда мы говорим о JavaScript, некоторые фреймворки не обязательно реализуют контроллеры, контроллеры обычно сортируют входные данные, могут инструктировать модели или представления и соответственно реагировать, поэтому обычно они сидят между моделями и представлениями, и они могут выполнять некоторую бизнес-логику и манипуляции данными, но они низки внутри MVC, это довольно сильно меняется. Вы обнаружите, что Backbone рассматривает контроллеры совсем по-другому; они фактически заменяют его идеей маршрутизатора для обработки навигации. Другие фреймворки могут поддерживать нечто, называемое контроллером, поэтому они представляют собой JavaScript MVC-фреймворки, которые должны делать что-то совершенно другое. Таким образом, существует много общего между MVC на стороне сервера и на стороне клиента, но обычно это сторона контроллера, в которой вещи отличаются от большинства, я бы сказал.
Луи: Точно. И, возможно, чтобы немного расширить идею представления, если кто-то не знаком с шаблонизацией JavaScript и с тем, как это работает, я знаю, что, вероятно, еще есть много разработчиков JavaScript, которые либо просто создадут встроенные DOM-узлы в своем коде. или загрузите целые куски HTML с сервера, не могли бы вы немного рассказать о шаблонах и о том, как они используются в этих средах?
Адди: О, абсолютно. Таким образом, использование шаблонов вообще, даже вне JavaScript MVC-фреймворков, очень полезно для ваших приложений. Один из способов, с помощью которого разработчики склонны подходить к этому без шаблонов, это то, что вы можете создавать HTML для своей страницы в памяти, используя катонирование сценариев, и я видел, как люди делают это; десять лет назад люди делали это в доктрине правильно, теперь, если вы не используете лучшие практики, есть люди, которые как бы объединяют десять или более строк кода, а затем внедряют это в страницу или внедряют каждый раз, когда новая линия строится в памяти, и проблема в том, что она не только неэффективна с точки зрения производительности, но и сложна в обслуживании. Итак, как только вы начинаете хранить несколько длинных строк, которые, как предполагается, представляют своего рода HTML, на вашей странице, и вы начинаете создавать большие приложения, может быть трудно понять, хорошо, какую часть моей страницы я сохранил сценарий в котором содержатся те строки, которые необходимо обновить сейчас. Что-то, что немного лучше и проще в управлении, но и более производительно, использует JavaScript-шаблоны. Итак, с использованием шаблонов JavaScript вы посмотрите, какой воспроизводимый вывод вы получаете в своем приложении, поэтому вместо того, чтобы я сказал «хорошо», у меня есть сервер JSON, поступающий из моего бэкэнда, который содержит несколько фотографий, что я собираюсь сделать Я собираюсь перебрать каждую из этих фотографий, и я собираюсь объединить некоторые теги изображений вокруг этого и некоторые вложенные div-ы вокруг этого, и я собираюсь создать себе псевдо-шаблон, который добавляет мою страницу. Вместо того, чтобы делать это, вы можете сказать, хорошо, ну, я в основном повторяю один и тот же шаблон несколько раз в этом цикле, почему бы мне просто не представить шаблон, иметь что-то намного меньшее, хорошо, хорошо, у меня может быть только один запись, сайт говорит, хорошо, хорошо, мой шаблон будет состоять из нескольких вложенных элементов div и элемента изображения. Ну, это все, что нужно, у меня не должно быть никаких исполнителей вокруг этого, у меня нет никакой дополнительной логики, если мне это не нужно, и вместо этого мы просто применяем шаблоны к этому поступающему каналу. через. В фреймворке мы фактически представляем, что фид — это либо модель, либо коллекция, и затем мы будем создавать шаблоны на основе этой коллекции, чтобы выводить их на экран, который является DOM, и это просто означает, что я могу фактически поддерживать шаблоны в несколько более читабельно, гораздо проще читать этот материал, чем проходить через все плюсы и минусы, которые у вас могут быть встроены, также легче, когда вы попадаете в точку, где вы можете захотеть управлять своим шаблоном за пределами вашей страницы , Таким образом, вместо того, чтобы поддерживать приложение, в котором вы должны иметь своего рода катонирование сценариев, а ваши различные шаблоны должны храниться встроенными, так что в более крупных приложениях вы увидите, что на самом деле есть большая выгода от выполнения этого вне вашей модели и ваших представлений. Если бы я хотел сказать, что у меня есть шаблон для представления того, как я на самом деле выводю элементы галереи, я могу просто сказать, вы знаете, item.tntl или item.txt, который может просто содержать представление разметки HTML для одного элемента на этом элементе. странице, одну фотографию на этой странице, а затем используйте ее с шаблонами для визуализации того, как будет выглядеть каждая другая фотография на странице. Это немного сложно объяснить, не показывая людям примеры, но, опять же, если вы посмотрите на новый MVC, то обнаружите, что на самом деле есть довольно много примеров того, как шаблоны могут эффективно использоваться с Фреймворки MVC и где это может пригодиться. Но да, я определенно рекомендую проверить это.
Луи: Да, абсолютно. Это то, что мы воспринимаем как само собой разумеющееся, работая на стороне сервера, но это, я думаю, все еще не является широко распространенной практикой, работающей на стороне клиента, возможно, потому что многие из этих фреймворков еще не получили широкого применения, но они определенно мощные и это определенно делает код более понятным, если, когда вам нужно изменить разметку, вы на самом деле изменяете разметку, а не копаетесь в коде, чтобы найти, о, я конкатенирую здесь div и хочу сделать это span сейчас; внезапно я должен пройти и найти все экземпляры кода, который делает это. Да, это звучит очень полезно, поэтому, я думаю, одна из проблем с Backbone заключается в том, что она довольно новая, она может показаться немного странной для людей, которые не привыкли работать с JavaScript в такой упорядоченной манере, люди используются просто щелкнуть скриптом, например, когда вы щелкаете по этой ссылке, что бы ни открывалось, или просто манипулированием DOM.
Адди: Хммм.
Луи: Так что это может иметь некоторую кривизну обучения, и я предполагаю, что именно в этом и заключается идея создания этой книги, верно?
Адди: Да, именно так. Так что я веду блог уже четыре или пять лет на JavaScript, и хотя блоги действительно полезны для начинающих, чтобы осваивать новые концепции и получать знания, они также идут с некоторыми оговорками, поэтому я решил написать эту книгу ; блоги содержат лишь ограниченное количество информации, которую вы можете передать в них, и я решил, зачем просто показывать кому-то, как создать приложение с каркасом, когда будут начинающие, которые спрашивают, где я могу изучить основы этой структуры, так что я могу использовать этот учебник. А потом у вас есть опытные пользователи, которые могут сказать, ну, это немного слишком для меня, я хотел бы знать, как я могу создать что-то более сложное, чем то, что вы мне сейчас показываете. И я думаю, что книга решает эту проблему довольно хорошо, потому что это означает, что если вы пришли из совершенно нового фона, и у вас очень мало опыта, такого как MVC в интерфейсе, или архитектурных шаблонов с JavaScript, вы можете просто прийти прочитайте книгу и начните с раздела «Основы», и вы довольно быстро освоите все эти понятия. Я начинаю довольно медленно, мы не бросаем людей в глубокий конец; Я думаю, что к концу первой главы вы поймете большую часть концепции, и одна из вещей, которую будет пытаться сделать книга, — это в первую очередь научить вас создавать очень простое приложение, а затем итерируйте это приложение, пока мы будем изучать оставшуюся часть книги, поэтому вы научитесь делать это приложение более сложным, научитесь интегрировать его с различными бэкэндами; есть люди, которые как бы просили узнать, как интегрировать Backbone с скажем Node.js или с Sinatra или с фреймворками WebSocket. И книга пытается помочь пользователю в их путешествии, поэтому она дает вам полный обзор — или мне, возможно, придется переделать это, но книга дает вам полный взгляд с высоты птичьего полета от начала до конца того, что вы Нужно научиться правильно использовать Backbone.
Луи: Точно. И еще одна вещь, которая действительно интересна в этой книге, помимо того, что она представляет собой книгу о Backbone, заключается в том, что вы сделали это своего рода бесплатно онлайн в виде совместной работы, потому что все это на GitHub, и я полагаю, вы принимаете вклады от разных людей, и он все еще находится на стадии разработки, он все еще не завершен, но я прочел раздел «Основы», и с точки зрения его подготовки определенно есть все основы, но Я предполагаю, что впереди еще много работы.
Адди: Да, да, впереди еще много работы. Поэтому, когда я впервые выпустил книгу, я думаю, что около двух недель назад, я создал список пожеланий, в который разработчики могли бы заходить и добавлять запросы на темы, которые они хотели бы охватить, поэтому, если разработчик хочет что-то написанное в книге, или они хотите, чтобы я подумал о том, чтобы написать главу о чем-то, все, что им нужно сделать, это просто представить идею, я поговорю об этом с другими разработчиками и посмотрю, что они думают, и если мы сочтем, что это хорошая идея, я напишу глава об этом. Просто перейдя к некоторым пунктам в списке пожеланий, сейчас есть люди, которые хотят, чтобы я сортировал адреса, используя разные тестовые стеки. Backbone, вы знаете, люди хотят знать, как выполнить модульное тестирование Backbone с помощью таких решений, как Queue Unit, они хотят узнайте, как создавать мобильные приложения с его помощью, так что впереди еще много работы, но я рад этому, я думаю, у нас есть прекрасная возможность создать что-то очень открытое, надеюсь, будет очень авторитетным и поможет некоторым людям в их путешествии через Магистраль.
Луи: Да, абсолютно. И этот вид бесплатной онлайн-книги, возможно, не был обычным явлением в отрасли, но это определенно то, что происходило раньше, и было несколько действительно замечательных примеров; Я имею в виду, что обе книги Марка Пилигрима по Python и HTML5 — это огромные ресурсы, которые чрезвычайно полезны для этих тем, и я думаю, что помощь в этих темах вызовет у сообщества гораздо больший интерес, чем они могли бы получить в противном случае.
Адди: О, абсолютно. Я думаю, что одна из причин, по которой я хотел выпустить эту книгу бесплатно, — я считаю, что учебные материалы должны быть бесплатными и доступными, где это возможно. Я думаю, что авторы, которые пишут, полностью в пределах своих прав публикуют контент и просят что-то вернуть, люди должны зарабатывать на жизнь, но когда вы открываете свой контент, это просто означает, что больше людей смогут его прочитать, поделиться им Распространите информацию об этом, и, я не знаю, я думаю, что это хороший способ создать учебный материал.
Луи: Да, особенно для чего-то вроде Backbone, где это не очень популярно в настоящее время, поэтому, если бы вы опубликовали книгу, обычную книгу, вы не ожидали бы продать много из них, но иметь ее бесплатно можно за этим стоит большой импульс, потому что людям легче его освоить.
Адди: Конечно. И я думаю, одна из причин, по которой я решил пойти на эту модель с открытым исходным кодом, это то, что я на самом деле второй раз выпускаю электронную книгу бесплатно. Впервые я получил что-то еще в прошлом году, эту книгу под названием Essential JavaScript Design Pattern; Я думаю, что у меня было около 250 000 загрузок в первый год, и трудно заставить людей читать что-то, и я просто счастлив, что, если мне удастся повторить тот же уровень успеха с Основами Backbone, который я сделал с этим, я Я буду счастлив, это будет просто означать, что я думаю, что у меня был способ положительно повлиять на других разработчиков и помочь им, я думаю, код лучше.
Луи: Да, определенно. И я думаю, что, вероятно, у разработчиков JavaScript есть много возможностей, чтобы взять некоторые подсказки от разработчиков на стороне сервера и взглянуть на такую структуру, это определенно стало главной темой в последние год или два, я думаю, что вы видели все подобного рода интерфейсные инфраструктуры, и действительно сосредоточены на попытках заставить JavaScript вести себя немного больше как язык структурированного программирования, с которым мы привыкли работать.
Адди: Хммм.
Луи: Теперь вы говорите, что рассматривали несколько различных JavaScript-фреймворков, появившихся в последние годы, и что вы решили использовать Backbone, потому что это было для вас естественным образом. Возможно, вы хотите поговорить о некоторых различиях и о том, где вы чувствуете, что вам нравится Backbone лучше, и где у некоторых других есть интересные особенности?
Адди: Во многих случаях я думаю, что все сводится к стилю. Итак, некоторое время назад, когда я впервые узнал о Backbone, я понял, что на данный момент существует ряд других фреймворков, которые пытались предложить нечто подобное. Итак, у нас был — я думаю, год назад у нас был SproutCore, у нас был JavaScript MVC, Spine также входил в картину, и большинство из этих фреймворков все еще существуют, SproutCore стал Ember.js, а большинство других по-прежнему вокруг, но для разработчиков, которые все еще находятся на грани и пытаются решить, какие фреймворки выбрать, я создал проект под названием To-Do MVC, чтобы попытаться помочь с этим. Что такое To-Do MVC, это в основном набор дел, так что каждый знает, что такое приложение, это просто приложение со списком, где вы можете добавить небольшие напоминания о том, что вам нужно сделать, вы можете скрестив элементы из списка, вы можете редактировать их на месте. Итак, идея с делом MVC состоит в том, что вы получаете одни и те же два приложения в нескольких различных средах, у нас есть версия Backbone.js, у нас есть Spine.js, JavaScript MVC, Ember.js; а для разработчиков, которые до сих пор не знают, какую платформу они хотят передать, просто означает, что все, что вам нужно сделать, — это зайти, посмотреть исходный код любого из этих приложений и посмотреть, какое из них наилучшим образом соответствует стилю. что вы можете использовать. Теперь, большинство из них реализуют некоторую форму MVC, или вариацию MVC, и это не значит, что простой просмотр исходного кода будет де-факто, который заставит вас выбрать платформу, вы, конечно, должны иди и исследуй немного больше того, что инфраструктура предлагает за пределами реализации, которую предлагает MVC. Но я думаю, что это просто способ угадать, что вы предпочитаете использовать, не тратя шесть или восемь месяцев на реализацию чего-либо, а затем, ну, вы знаете, это, вероятно, было не лучшим решением.
Луи: Да, абсолютно. Итак, вы когда-нибудь пытались реализовать один и тот же набор функций во всех этих различных средах?
Адди: О, абсолютно. Я думаю, что очень трудно догадаться, чтобы быть хозяином всех фреймворков, это чрезвычайно сложно из-за меняющихся наборов функций и синтаксиса, который используется, и поэтому сообщество здесь очень помогло. В любое время было приложение, которое я не чувствовал, что я мог бы реализовать лично, я пытался связаться с Twitter и GitHub, и сообщество было великолепным, люди пришли и сказали, вы знаете, я собираюсь потратить на выходных создаю это приложение, и если вы можете помочь мне со стилем, просто чтобы убедиться, что он реализован должным образом, я согласен передать это в ToC Do MVC, и это действительно помогло развитию проекта. В настоящее время я работаю над некоторыми участниками, чтобы получить что-то вроде цитаты Dojo MVC и других приложений, но это просто означает, что любой опыт, который есть у других разработчиков с фреймворками, которых у меня нет, мы все равно можем предоставить их проекту и надеюсь, помочь кому-нибудь еще выбрать что-то, что будет хорошо для них.
Луи: Да, абсолютно. Если разработчик JavaScript в какой-то степени находится на пределе, они сидят на том этапе, когда они очень довольны тем, что делают все, что делали до сих пор, просто используя встроенный DOM и jQuery, они чувствуют, что иногда они будут выглядеть вернемся к их коду и, скажем так, о, это немного сложно читать, понимать или играть, или они пришли к чужому коду и почувствовали это, но это похоже на большой шаг, чтобы начать перемещать, возможно, существующий код поверх к чему-то вроде Backbone. Какой хороший способ намочить ноги и начать играть с этим?
Адди: Честно говоря, я собираюсь дать очень глупый ответ, просто рассмотрим приложение базового вида, которое поставляется с Backbone. Как я уже говорил с приложениями для дел, это просто то, что я на самом деле встроил в законченный проект, он просто дает вам хороший простой пример того, как вы можете разбить приложение на используемые модели, контроллеры, если инфраструктура поддерживает его, или маршрутизаторы и коллекции, и т. д. То, что на самом деле также имел MVC To-Do, является версией приложения to-do, реализованного только на jQuery и на простом JavaScript, так что вы действительно можете взглянуть на то, как вы можете получить то, что в настоящее время я предполагаю, что некоторые люди могли бы назвать спагетти-кодом, который похож на все в одном файле, и затем посмотреть, как это может быть на самом деле разбито на различные проблемы с использованием различных структур. Так что я думаю, что To-Do MVC действительно может помочь вам и в этом, надеюсь.
Луи: Точно. Так что это довольно интересно. Это большая разница с точки зрения количества написанного кода по сравнению с простым JavaScript или jQuery, когда вы используете эти различные фреймворки?
Адди: Я думаю, что с точки зрения количества кода, который разработчик должен написать сам, он минимален; это минимально, сложение очень минимально. Вы, конечно, должны включить фреймворк, который выбираете, поэтому, если я использую Backbone, это будет несколько дополнительных килобайт в моем проекте, если я использую Spine, это будет тот же случай. Но, да, это минимально с точки зрения усилий разработчика, которые требуют превращения этого кода во что-то более структурированное.
Луи: Точно.
Addy: Но для разработчиков, которые являются новичками в этом, и которые все еще задаются вопросом, хорошо, как мне взять мое стандартное приложение JavaScript и преобразовать его или разбить на что-то, что модели используют в контроллерах, ну, есть некоторые очень простые вещи, которые вы сможет сделать. Первое, что я хотел бы сделать, это взглянуть на данные в других ваших приложениях, чтобы узнать, какие уникальные данные представлены в вашем приложении. Для приложения фотогалереи, опять же, у вас будут такие вещи, как идентификатор изображений, у вас будут идентификаторы галерей, которые содержат несколько изображений, так что это будет группа или коллекция. Затем вам нужно будет подумать о том, что пользователь должен видеть и делать. Теперь все сводится к вашему мнению, поэтому мы только что говорили о моделях, модели — это все об уникальных данных в вашем приложении и о том, как вы хотите их представлять. У вас даже есть представления, которые в основном являются тем, что пользователь должен уметь видеть и делать, это немного сложнее, но давайте поговорим о — давайте посмотрим на шаблоны, верно, поэтому еще одна вещь, которую нужно рассмотреть, это то, что есть ли в вашем приложении повторяемый вывод, который вы хотите перевести на шаблоны JavaScript, чтобы сделать его немного более производительным. Кроме того, у вас есть контроллеры, и роль контроллеров различна, на самом деле мы уже как бы рассмотрели это, и в вашем приложении, если вы говорите об использовании, возможно, Backbone, допустим, что ваши контроллеры на самом деле являются маршрутизаторами, и какие маршрутизаторы собираются они собираются позаботиться о навигации по приложению. Поэтому, если у меня есть одностраничное приложение, и я хочу начать навигацию по различным галереям, которые могут быть доступны, когда я нажимаю на определенную галерею, я хочу, чтобы пользователь все еще мог отмечать путь к этой галерее. Таким образом, даже если это не приложение, которое имеет своего рода реальные пути, и на сервере нет реальных папок, которые могли бы представлять файл или представление, которое мы собираемся отображать, мы все же хотим дать им хороший clean way to simulate this behavior.А с помощью Backbone вы можете использовать PushState в HTML5 или просто использовать URL-адреса hashbang для имитации этих URL-адресов, чтобы люди все еще могли войти и сказать: «Хорошо, я перешел к определенной фотографии в этом приложении, я знаю, что это не так». t приложение, которое имеет реальные папки или имеет надлежащую структуру на стороне сервера, но, копируя и вставляя этот URL-адрес с помощью маршрутизаторов Backbone, я все еще могу очень легко и очень легко перемещать пользователя обратно к определенному изображению, это одна из сильных сторон эти рамки MVC; если они поддерживают маршрутизацию по умолчанию, это означает, что вам не нужно как-то исходить из самого себя и выяснять, как я отслеживаю события изменения хэша и как мне самому позаботиться обо всех этих грязных вещах, связанных с URL-адресами.
Луи: Да, и это распространяется на такие вещи, как история браузера и кнопка возврата?
Адди: Это делает; в зависимости от фреймворка у него может быть встроенная поддержка управления кнопкой «назад», но да. Это также означает, что если я перемещаюсь на несколько глубин внутри приложения, у которого может быть несколько представлений, я могу легко использовать кнопку возврата; Если приложение было закодировано правильно, я могу использовать кнопку «Назад», чтобы вернуться туда, где я находился.
Луи: Да, верно. И знаете ли вы под капотом, использует ли это историю браузера HTML?
Addy: Опять же, это действительно зависит от используемой вами платформы.
Луи: Да, но просто говорю о Backbone специально, потому что вы, вероятно, знаете об этом немного больше.
Addy:Таким образом, с точки зрения конкретного вопроса вы, вероятно, будете больше говорить о Backbone или HTML5 PushState, и с точки зрения этого, да, Backbone действительно поддерживает HTML5 PushState, если вы хотите включить его, вы можете использовать его. И преимущество использования PushState заключается в том, что люди скорее видят что-то вроде хэша или хеш-фрагмента в URL, все, что они увидят, это очень чистый, очень простой URL; конечный пользователь не узнает, что без какой-либо проверки вашего кода он не узнает, что вы используете одностраничное приложение, он будет выглядеть так, как будто он полностью основан на сервере, и ему нравятся все эти пути. на самом деле существуют на стороне сервера, но это не так, так что это довольно красивая вещь, потому что это означает, что они неНе нужно беспокоиться о том, будет ли этот странно выглядящий URL работать в других браузерах или что-то в этом роде. И прелесть фреймворков, которые поддерживают HTML pushState, во многих случаях они изящно переходят на использование хеш-взрыва, если pushState не поддерживается. Поэтому, если я пытаюсь перемещаться, используя pushState URL, который не содержит хеш-бэнга, и мое приложение не обязательно поддерживает это, я могу вместо этого использовать хеш-бэнг и по-прежнему предоставлять пользователям возможность добавлять закладки в URL.Вместо этого я могу использовать хэш-удары и по-прежнему предоставлять пользователям возможность добавлять URL-адреса в закладки.Вместо этого я могу использовать хэш-удары и по-прежнему предоставлять пользователям возможность добавлять URL-адреса в закладки.
Луи: Точно. Так что это было немного отклонением от того, о чем вы говорили, то есть когда вы смотрите на то, как разбить свое приложение и взять приложение, которое вы написали неструктурированным образом, и попытаться структурировать его, используя это, и вы как раз дошли до того, чтобы сказать, как вы разбиваете взаимодействия на маршруты и тому подобное.
Addy:Абсолютно. Есть много приложений, которые люди используют ежедневно, которые являются одностраничными приложениями, и они не обязательно используют Backbone, они могут использовать своего рода доморощенные решения, которые были чем-то другим, но на самом деле есть одностраничные приложения, которые либо используя хэш-удары, чтобы дать людям возможность перемещаться по ним, либо они используют HTML5 pushState. Gmail — идеальное приложение для этого; Gmail, вероятно, мое любимое приложение на основе JavaScript, и если вы посмотрите на схему URL-адресов, которую использует Gmail, вы увидите, что в некоторых браузерах на самом деле используются хэш-банг, чтобы помочь вам перемещаться по разным электронным письмам. И если вы скопируете эти URL-адреса hashbang и вставите их обратно, вы действительно сможете добраться туда, где вы были, независимо от того,Вы говорите о конкретном электронном письме или о конкретной настройке, на которую вы смотрели, и я думаю, что это довольно красиво. Возможность четко управлять состоянием и помогать людям добраться до того места, где они находились в приложении, и делиться этими местоположениями с людьми, просто означает, что правильность использования JavaScript для этих приложений немного более сильна и немного более мощна, я думаю.
Луи: Определенно. Хорошо, хорошо, я просто хочу поблагодарить вас за то, что вы нашли время прийти на шоу и обсудить все эти темы, я думаю, что действительно интересно узнать ваше мнение обо всем этом. Прежде чем мы пойдем, я хотел бы предоставить всем ссылки на соответствующие материалы, поэтому книга находится по адресу github.com/addyosmani/backbone-fundamentals , и вы хотите дать несколько ссылок на ваш Twitter и ваш сайт, чтобы люди могли искать тебя онлайн.
Адди: Абсолютно. Я в Твиттере @addyosmani , так что это addyosmani; и это то же самое для GitHub, так что github.com/addyosmani , и если вы хотите прочитать немного больше о некоторых книгах и статьях, посвященных скринкасту, которые я пишу, все они на addyosmani.com .
Луи: Фантастика, все довольно просто. Итак, еще раз, большое спасибо, что нашли время прийти на шоу и поговорить об этом, и я действительно с нетерпением жду возможности увидеть, как развивается эта книга и как люди участвуют в ней и способствуют ей.
Адди: Абсолютно, спасибо, что приняли меня.
Луи: Это было приятно, спасибо.
Адди: Отлично, спасибо.
Луи: И спасибо за прослушивание на этой неделе эпизода подкаста SitePoint. Мне бы очень хотелось услышать, что вы думаете о сегодняшнем шоу, поэтому, если у вас есть какие-либо мысли или предложения, просто зайдите на Sitepoint.com/podcast и вы можете оставить комментарий к сегодняшнему эпизоду, вы также можете загрузить любой из наших предыдущих эпизодов для загрузки. или подписаться, чтобы получить шоу автоматически. Вы можете следить за SitePoint в Твиттере @sitepointdotcom , это сайт dotpoint dotcom, и вы можете следить за мной в Твиттере @rssaddict .
Тема музыки Майка Меллы .
Спасибо за прослушивание! Не стесняйтесь сообщить нам, как у нас дела, или продолжить обсуждение, используя поле комментариев ниже.