Які сильні та слабкі сторони в реальному світі багатьох рамок, заснованих на backbone.js? [зачинено]


186

Сподіваємось, що хтось може поділитися своїм досвідом з деякими з останніх варіантів backbone.js там. У мене є хороший досвід роботи з базовою / підкреслюючою / вимагаю в декількох проектах, і я хотів би зробити наступний крок до більш досконалих рішень для складної структури додатків.

Я знаю, що доступні такі рамки:

І, певно, я пропустив декілька.

Короткий вступ про відмінності тут:

але це дуже загально. Мені було цікаво, чи може хтось поділитися своїм досвідом роботи із програмами реального життя, використовуючи ці рамки.

Яка користь від вибору одного над іншим? Коли маріонет стане кращим рішенням щодо чапліна, або чому, наприклад, ветебри краще для певних застосувань.

Звичайно, очевидною відповіддю буде " використовувати те, що найкраще підходить для ваших потреб ", але мені не вистачає досвіду з цими рамками, щоб знати їх силу / призначення / переваги або бажані сценарії.

Дякую!

Редагувати 1: знайшов цю публікацію: Хребна кістка.Маріонетта проти Магістральна котельня

Редагувати 2: Відповідь Матіаса Шефера (Чапліна) поштою:

Коротше кажучи, поточна структура близька до версії 1.0, оскільки вона вже використовується у виробництві. Ми не плануємо додавати великі нові функції або порушувати зміни API до 1,0.

Маріонетка - це напевно найповніша і стабільна бібліотека. Він стосується декількох аспектів розробки додатків JS за допомогою Backbone. Наприклад, у нього є сильний вигляд шару, який магістральна сама залишає абсолютно порожнечою. Звичайно, ви побачите, що деякі аспекти не відповідають вашим вимогам, і ви можете відчути потребу створити структуру навколо Маріонетти.

Навпаки, Чаплін зосереджується на досить невеликому, але дуже важливому аспекті додатків «Хребна», а саме на загальній структурі додатків та життєвому циклі модулів. У цьому плані Чаплін дуже сильно налаштований і більше нагадує фреймворк, ніж бібліотеку (як, наприклад, "ваш код називає бібліотеку, рамка називає ваш код"). Чаплін пропонує деякі центральні класи, які сидять над окремими модулями додатків і контролюють загальний стан додатків. Це дає вашій програмі звичайну структуру, як, наприклад, Ruby on Rails.

У Чапліні ви оголошуєте деякі маршрути, які відображаються у контролерах, і Чаплін запускає контролер після відповідності маршруту. Він також дбає про утилізацію старих контролерів, а також демонстрацію та приховування основних поглядів, які повинен створити контролер. Це основна ідея, але Чаплін піклується про потворні деталі, щоб зробити це безперебійно.

Є два принципи, які поєднуються з цією структурою: - Модуляризація, роз'єднання та пісочниця - міжмодульна комунікація за допомогою публікації / підписки та посередника

Звичайно, ці зразки не є новими у світі розробки програмного забезпечення, і Чаплін - не єдина бібліотека, яка застосовує їх до програм Backbone.js.

Чаплін також пропонує вдосконалення для шару View, наприклад, дуже складний CollectionView, але в цілому не так, як Маріонет з його регіонами та макетами. Але написати такі мета-класи порівняно просто за допомогою засобів, які надає Чаплін Погляди.


12
+1 Ваше питання потрапило до місця. Протягом останнього року або двох якийсь обхід рамки роздув ландшафт безліччю натхненних архітектурою проектів, які дуже важко розрізнити - кожен з яких реалізує легкий власний і більш ніж часто роздутий підхід до виконання справ. Зауважте, що це коментар :)
kontur

Відповіді:


132

Більшість (усіх?) Рамок, на які ви дивитесь, вирішують ті самі проблеми, але вони роблять це дещо по-різному з трохи іншими цілями.

Я думаю, що справедливо сказати, що всі ці проекти вирішили б проблеми в таких категоріях:

  • Надайте розумний набір за замовчуванням
  • Зменшити код котла
  • Забезпечте структуру програми поверх будівельних блоків BackboneJS
  • Витягуйте шаблони, які використовують автори у своїх додатках

Маріонетка, яку я будую з грудня 2011 року, також має на увазі кілька дуже чітких цілей та ідеалів:

  • Складова архітектура додатків
  • Вплив на схему корпоративного обміну повідомленнями
  • Параметри модуляризації
  • Поступове використання (не вимагає повного або нічого)
  • Немає блокування сервера
  • Полегшіть зміни типових значень
  • Код як конфігурація / над конфігурацією

Я не кажу, що жодна з інших рам не має цих самих цілей. Але я думаю, що унікальність Маріонетки випливає із поєднання цих цілей.

Комбінована архітектура додатків

Я провів понад 5 років, працюючи в товстих клієнтах, розподілених програмних системах, використовуючи WinForms та C #. Я створив додатки для настільних ПК, ноутбуків (смарт-клієнтів), мобільних пристроїв та веб-додатків, усі вони обмінювались основним функціональним набором та багато разів працювали з одним і тим же сервером. У цей час я дізнався значення модуляризації і дуже швидко рухався вниз по шляху композиційного дизайну додатків.

Основна ідея полягає в тому, щоб "скласти" досвід роботи програми та обробити багато менших, окремих фрагментів, які не обов'язково знають один про одного. Вони реєструються в загальній композиційній системі додатків, а потім спілкуються через різні засоби роз'єднаних повідомлень та дзвінків.

Я трохи писав про це у своєму блозі, представляючи Маріонетку як складову архітектуру додатків для Backbone:

Черги / шаблони повідомлень

Ці ж масштабні розподілені системи також скористалися чергою повідомлень, моделями інтеграції підприємств (шаблонами обміну повідомленнями) та службовими шинами для обробки повідомлень. Це, більше всього іншого, мало величезний вплив на мій підхід до роз'єднаної розробки програмного забезпечення. З цієї точки зору я почав бачити однопроцесорні програми в пам'яті WinForms, і незабаром моя сторінка сервера та розробка веб-додатків вплинули на це.

Це безпосередньо перейшло до того, як я дивлюся на дизайн додатків Backbone. Я надаю агрегатор подій в Маріонеті, як для об'єкта додатків високого рівня, так і для кожного модуля, який ви створюєте в програмі.

Я думаю про повідомлення, які я можу надсилати між своїми модулями: командні повідомлення, повідомлення про події тощо. Я також думаю про спілкування на стороні сервера як повідомлення з цими тими ж шаблонами. Деякі з моделей вже пробилися до Маріонетти, а деякі ще не стали.

Модуляризація

Модуляризація коду надзвичайно важлива. Створення невеликих, добре капсульованих пакетів, що мають особливий фокус із чітко визначеними точками входу та виходу, є обов'язковим для будь-якої системи будь-якого значного розміру та складності.

Маріонет здійснює модуляризацію безпосередньо через свої moduleвизначення. Але я також визнаю, що деяким людям подобається RequireJS і хочуть цим користуватися. Тому я забезпечую як стандартну збірку, так і сумісну з RequireJS збірку.


MyApp = new Backbone.Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // your module code goes here

});

(Поки для цього немає допису в блозі)

Поступове використання

Це одна з основних філософій, яку я привертаю до кожної частини Маріонетки, яку я вмію: жодних вимог "все або нічого" для використання Маріонетти немає.

Сама опорна система має дуже поступовий і модульний підхід до всіх її будівельних блокових об'єктів. Ви можете вибирати, які саме ви хочете використовувати, коли. Я дуже вірю в цей принцип і прагну переконатися, що Маріонетка працює так само.

З цією метою більшість творів, які я вбудував у «Маріонетку», побудовані для того, щоб стояти окремо, працювати з основними частинами хребта та ще краще працювати разом.

Наприклад, майже кожному додатку Backbone необхідно динамічно показувати перегляд Backbone в певному місці на екрані. Додатки також повинні обробляти закриття старих подань та очищення пам'яті, коли буде створено нове. Ось тут Маріонетта Regionприходить грати. Регіон обробляє код котлової панелі для перегляду, виклику візуалізації на ньому та передачі результату в DOM для вас. Потім ви закриєте цей вид і очистять його для вас, за умови, що у вашому поданні є метод "закрити".


MyApp.addRegions({
  someRegion: "#some-div"
});

MyApp.someRegion.show(new MyView());

Але вам не потрібно використовувати погляди Маріонетти, щоб використовувати регіон. Єдина вимога полягає в тому, щоб ви простягалися з Backbone.View в якийсь момент прототипу ланцюга об'єкта. Якщо ви вирішите надати closeметод, onShowметод або інші, регіон Маріонетта зателефонує вам у потрібний час.

Немає блокування сервера

Я будую програми Backbone / Marionette на основі широкого спектру серверних технологій:

  • ASP.NET MVC
  • Рубі на рейки
  • Рубі / Сінатра
  • NodeJS / ExpressJS
  • PHP / тонкий
  • Java
  • Ерланг
  • ... і більше

JavaScript - це JavaScript, якщо мова йде про роботу в браузері. JavaScript на сервері теж є приголомшливим, але він має нульовий ефект або впливає на те, як я пишу свій браузер на базі JavaScript.

Через різноманітність проектів, які я будував, і бек-енд-технологій, якими користуються мої клієнти, я не можу і не замикаю Маріонетту в єдиний стек технологій на стороні сервера з будь-якої причини. Я не надаватиму проект котельні. Я не надаю рубінову дорогоцінну каменю або пакет npm. Я хочу, щоб люди розуміли, що для Маріонетки не потрібен конкретний сервер із зворотним зв'язком. Це браузер на JavaScript, і бек-енд не має значення.

Звичайно, я повністю підтримую інших людей, які надають пакети для їх мови та основи. Я перераховую ці пакунки у Вікі і сподіваюся, що люди продовжуватимуть створювати більше пакунків у міру необхідності. Але це підтримка громади, а не пряма підтримка Маріонетти.

Легко змінюйте значення за замовчуванням

Намагаючись зменшити код котла та забезпечити розумне значення за замовчуванням (це ідея, яку я безпосередньо "запозичив" у LayoutManager Тіма Бранєна), я визнаю необхідність інших розробників використовувати дещо інші реалізації, ніж я.

Я надаю рендерінг на основі вбудованих <script>тегів для шаблонів, використовуючи шаблони Underscore.js за замовчуванням. Але ви можете замінити це, змінивши Rendererта / або TempalteCacheоб’єкти в Маріонеті. Ці два об'єкти є основою можливостей візуалізації, і є сторінки вікі, які показують, як змінити це для конкретних двигунів шаблонів та різних способів завантаження шаблонів.

З версією Mario Marionette v0.9 стає ще простіше. Наприклад, якщо ви хочете замінити використання блоків сценаріїв вбудованого шаблону на попередньо складені шаблони, вам потрібно замінити лише один метод на рендері:


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};

і тепер вся програма використовуватиме заздалегідь складені шаблони, які ви додаєте до templateатрибута вашого перегляду .

Я навіть надаю надбудову Marionette.Async з v0.9, що дозволяє підтримувати асинхронно візуалізацію подань. Я постійно прагну, щоб якомога простіше було замінити поведінку за замовчуванням у Маріонеті.

Код як конфігурація

Я прихильник "конвенції щодо конфігурації" в певних контекстах. Це потужний спосіб зробити справи, і Маріонетка забезпечує трохи цього - хоч і не надто багато, якщо чесно. Багато інших фреймворків, особливо LayoutManager - забезпечують більше конвенцій щодо конфігурації, ніж Маріонет.

Це робиться з метою та наміром.

Я створив достатню кількість плагінів, фреймворків, доповнень та додатків JavaScript, щоб знати, як намагатися домогтися, щоб конвенції працювали змістовно і швидко. Це можна зробити зі швидкістю, але зазвичай ціною того, що можна змінити.

З цією метою я використовую підхід до «Маріонетти» з «кодом як конфігурацією». Я не надаю багато API "конфігурації", де ви можете надати об'єктний буквал зі статичними значеннями, які змінюють частину поведінки. Натомість я документую методи, якими володіє кожен об’єкт - як через анотований вихідний код, так і через фактичну документацію API - з наміром розповісти, як змінити Маріонетту так, як ти хочеш.

Надаючи чистий і зрозумілий API для об’єктів Маріонет, я створюю ситуацію, коли заміна поведінки конкретного об'єкта або маріонетки в цілому відносно проста і дуже гнучка. Я жертвую "прості" конфігураційні API-інтерфейси для забезпечення гнучкості надання власного коду, щоб зробити роботу так, як вам потрібно.

У Маріонеті не знайдеться API "налаштування" чи "параметрів". Але ви знайдете велику кількість методів, кожен з яких служить дуже конкретній цілі, з чистими підписами, які дозволяють легко змінити, як працює Маріонетка.


16
Чому це найвища відповідь? Це не відповідає на питання - це в основному історія / реклама для Маріонетт ...
Jess Telford

@JessTelford Ви можете перечитати питання, це одна досить хороша відповідь на нього.
Мор

@mor питання What is the benefit of choosing one over the other?- така відповідь є Marionette [...] has a few very distinct goals and ideals in mind, яка не раз порівнює себе з іншими рамками. Якщо питання було, будь ласка, поясніть, що може зробити кожен із цих рамок , тоді впевнений, це чудова відповідь. Але це не було. І це не так.
Джесс Телфорд

@JessTelford Питання чітко вимагає декількох відповідей. У цьому зазначено сильні та проблеми, які вирішує Маріонетка. Прочитавши питання, я знайшов цю відповідь дуже корисною. На мою думку, це не обов'язково найкраще, але все-таки це хороша відповідь. Так, і питання: What are the strengths and weaknesses of....
Мор

@mor Не зрозумійте мене неправильно - це дуже ретельний і чіткий опис Маріонетти. Я просто не відчуваю, що це відповідає на питання. У будь-якому випадку, відгуки - це хороша відповідь.
Джесс Телфорд

25

Наразі я використовую основу з модулем диспетчера макетів та рульовим механізмом як двигун шаблону, і мені було дуже просто налаштувати невелику програму за допомогою вже наявного сервера Grails. Перш ніж почати використовувати макет-менеджер, я прочитав про Маріонетту та Чапліна, і обидва мені здалися дуже потужними, але складними. Тоді я згадав, чому я спочатку вибрав backbone.js: простота. Усі ці рамки додають те, що хребет залишився дизайном. Я не кажу, що рамки погані, але якщо мені потрібно щось складніше, я спробую інші проекти, наприклад, ember.js або sproutcore, оскільки вони мають унікальну кодову базу, написану з метою на увазі своїх розробників. Ось у нас є рамки поверх іншого. Звичайно, хребет є основою не тільки для створення додатків, але і для написання якоїсь більш потужної бібліотеки, але єдине, на що я думаю, насправді погано - це шар перегляду, оскільки не вистачає менеджера макетів та можливості вкладення поглядів. З диспетчером верстки цей проміжок заповнений досить добре.

Отже, моя відповідь на ваше запитання: почніть з використання основної системи, як є, і запитайте себе, чого не вистачає, і які ваші очікування щодо рамки. Якщо ви виявите, що за основою залишилось занадто багато речей, тоді перейдіть і шукайте їх в інших рамках і виберіть те, що є найближчим вашим потребам. І якщо ви все ще не впевнені у виборі, можливо, хребет не для вас, і вам доведеться шукати якесь інше рішення (ember.js, sproutcore, ExtJs, JavaScript MVC - це все добре). Якщо у вас є досвід написання клієнтських додатків, вам не потрібен досвід роботи з усіма рамками, щоб вибрати правильний (для вас, звичайно)


13

Я вивчив різні структури побудови за допомогою Backbone.js і створив хребці для проекту в HauteLook. Цілі проекту включали в себе ... динамічне завантаження скриптів, формат модуля AMD, управління залежностями, побудова з переважно бібліотеками з відкритим кодом, впорядкування коду в пакетах, оптимізація та складання для однієї чи багатьох програм для однієї сторінки, розміщення на повністю кешованому сервері, наприклад, жоден сервер -за допомогою сценаріїв, використовуючи лише API для даних, і найсмішніше для мене, використовуйте розробку, орієнтовану на поведінку. Опис проекту є за адресою: http://www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/

Наша проблема:

Вибрані бібліотеки (jQuery, Underscore.js, Backbone.js, RequireJS, вуса) забезпечують завантаження модулів, управління залежностями, структуру програми (для моделей, колекцій, подань і маршрутів), асинхронну взаємодію з API, різні утиліти та об'єкти для управління асинхронними поведінками , наприклад (Обіцянки) Відстрочка, Відкликання дзвінків. Інша логіка, необхідна для завершення рамки, включає:

  • об'єкт (модель) для управління станом односторінкової програми;
  • менеджер макетів для представлення, впорядкування / переходу та чітких поглядів та
  • контролери, які відповідають на маршрути, отримують / встановлюють стан програми та передають роботу менеджеру компонування.

Наші рішення (реалізовані в хребцях):

Менеджер стану додатків -

Менеджер програм зберігає дані в пам'яті, а також зберігає дані у сховищі браузера, щоб забезпечити ресурс для загальних даних / метаданих. Також надає дані (стан) для реконструкції переглядів сторінок на основі попередніх взаємодій (наприклад, вибраної вкладки, застосованих фільтрів). Менеджер стану додатків надає стратегію для отримання ресурсів. Мав намір діяти як державна машина.

Менеджер макета -

Менеджер макетів має один або кілька представлень, а також цільовий документ (DOM) для кожного (візуалізованого) перегляду. Сторінка може переходити між багатьма переглядами, тому менеджер макетів слідкує за станами перегляду, наприклад, надані, не відображені, відображені, не відображаються. Ви можете використовувати диспетчер макетів для ледачого завантаження та надання (відокремленого) перегляду, про який, швидше за все, вимагає відвідувач сайту, наприклад, зміни вкладки на сторінці. Цей об'єкт управляється переходом між станами перегляду. Цілий макет може бути очищений, щоб видалити об'єкти перегляду та їх прив'язки, щоб підготувати ці об'єкти до збирання сміття (запобігаючи витоку пам'яті). Диспетчер макетів також повідомляє стан перегляду з контролерами.

Контролер -

Об'єкт контролера викликається функцією обробника маршруту і відповідає за отримання відповідного стану (моделі додатків) для створення сторінки (макета), (також відповідає за встановлення стану при зміні маршрутів). Контролер передає залежні дані (моделі / колекції) та сконструйовані об'єкти перегляду для потрібної сторінки до менеджера макетів. В якості побічного ефекту використання контролерів запобігає розмиванню та переплутанню об'єкта маршрутів. Маршрут повинен відображати контролер, який потім починає перегляд сторінки, зберігаючи функції керування маршрутом.

Додаток Todos розміщується як у режимі розробки, так і оптимізовано на Heroku ...

Багато понять в інших структурах запозичені, наприклад, необхідність перегляду місцевості для попереднього витоку пам’яті, на що вказував Дерик Бейлі - http://lostechies.com/derickbailey/ ; менеджер планування Тім Бранйен http://tbranyen.github.com/backbone.layoutmanager/

Підсумовуючи, Backbone.js призначений як інструмент у вашій програмі. Бібліотека Backbone.js не забезпечує всю архітектуру, яка вам знадобиться для створення програми, але забезпечує велику взаємодію з API та міцною структурою коду для ... Перегляди (діють як контролери) і ваш Модель і колекції шару даних і, нарешті, маршрути. Ми побудували хребці для того, щоб визначити цілі нашого проекту, і вирішили витягнути код як основу для використання, вивчення чи іншого.

Відповідь на ваше запитання, на мою думку, полягає в тому, щоб вивчити всі рамки та використовувати те, що потрібно для досягнення ваших цілей, якщо ви виявите, що ваші цілі проекту тісно співпадають з однією з каркасів, побудованих із Backbone, а потім чудовими, інакше побудованими вашими власними рамками Є чудові приклади, якими поділяється громада. Або якщо ви опинилися трохи загубленими у напрямку вашої заявки, тоді виберіть щось більш впевнене та структуроване, можливо, Ember.js. Чудова річ, що є гарний асортимент варіантів, який допоможе вам кодувати за допомогою MVX типу MVC типу шаблону з JavaScript.


Дякую за детальну відповідь.
danikoren

13

Я розробив систему Luca під час роботи в BenchPrep, де ми використовували її для розробки декількох великих додатків для однієї сторінки вгорі бібліотеки backbone.js.

Я працював з ExtJS кілька років до цього і вкрав мої улюблені концепції з тієї рамки, як, наприклад, архітектура, керована компонентами, де ви розвиваєте свої погляди як окремі компоненти, а потім з'єднуєте їх разом з іншими компонентами, використовуючи представлення контейнерів. А оскільки він базується на конфігурації, розробку програми в Luca дуже схоже на опис об'єкта з JSON.

Однією з переваг такого підходу є можливість повторного використання компонентів у кількох додатках або в різних місцях вашої програми, за допомогою лише незначних змін за допомогою розширення Backbone. Також дуже просто експериментувати з багатьма різними макетами / презентаціями компонентів, роблячи лише незначні зміни в конфігурації JSON.

На додаток до широкого спектру допоміжних / корисних функцій, Luca Ships з багатьма похідними магістральних систем вищого рівня, які можна скласти разом будь-яким способом, який можна уявити для створення складного інтерфейсу.

Перегляди, компоненти, контейнери

  • Доповнені моделі, перегляд, колекція, класи маршрутизаторів
  • Параметри конфігурації, що полегшують зв’язок між Моделями, Колекціями, Переглядами, Програмою та відповідними менеджерами.
  • Контейнери (Розділення / Стовпчик, Макет сітки, Перегляд вкладки, Перегляд карт / майстра)
  • FormView з усіма стандартними компонентами поля та помічниками для синхронізації з Backbone.Model
  • GridView для генерації прокручуваних елементів сітки з Luca.Collection
  • CollectionView, для створення представлень на основі колекції
  • Панелі інструментів / кнопки

Стилі завантаження Twitter та розмітка безкоштовно

  • Лука дуже добре грає з рамою завантаження Twitter. Просто встановивши Luca.enableBootstrap = true та включивши CSS, ваші компоненти (такі як перегляди вкладок, панелі інструментів, кнопки, форми, поля, сітки тощо) автоматично використовуватимуть розмітки, сумісні з Twitter Bootstrap, та умовні позначення класів CSS.
  • Використовує систему Grid для компонування та інтелектуально реагує на більшість базових класів css для завантаження.
  • Компоненти Luca.Viewport та GridLayout налаштовані на роботу з чутливими, текучими або статичними системами сітки завантажувальної системи.
  • Намагається надати один на один збіг для компонентів завантажувального пристрою Twitter, щоб представити їх як настроювані перегляди магістральних пристроїв

Компонент програми

  • Державна машина, що базується на Backbone.Model, забезпечує способи отримання / встановлення та події зміни атрибутів як стиль потоку управління додатком
  • Інтегрований компонент контролера, який приховує / показує сторінки програми у відповідь на події Backbone.Router або State Machine
  • Інтегрований диспетчер колекцій, який відслідковує створені вами колекції, дозволяє вам розширити їх, згрупувати їх, призначити їм параметри за замовчуванням
  • Менеджер сокетів, який є шаром абстрагування поверх сервісів веб-сокет, що робить натискання таким же простим, як Backbone.Event
  • Маршрутизатор подій клавіатури, який запускає названі ключові події на компонентах, які хочуть реагувати на такі події

Вдосконалення колекції та моделей

  • Колекції базуються на основі магістрального запиту , який забезпечує інтерфейс запитів, дуже подібний до mongoDb
  • увімкніть локальну сховище Backbone.sync, просто встановивши collection.localStorage = true
  • автоматична сукупність колекцій, дані яких завантажуються під час завантаження сторінки
  • кешовані методи / обчислені властивості. кешувати результати методів колекції та закінчувати термін кешу у відповідь на зміни / додавання / видалення подій колекції або її моделей
  • обчислені властивості на моделях. будувати атрибути на основі складної функції та автоматично оновлювати обчислене значення у відповідь на зміни

Події та гачки

Компоненти Luca є більш ліберальними щодо подій, які вони випромінюють, порівняно з компонентами, що складаються в основі. Вони випромінюватимуть події, як і раніше: ініціалізувати, після: ініціалізувати, перед: візуалізувати, після: візуалізувати, активувати, спочатку: активацію, дезактивацію, спочатку: дезактивацію, і це дозволяє більш тонко налаштувати поведінку ваших компонентів. Крім того, визначивши подію у власність @hooks на вашому огляді, вона автоматично викликає функцію з аналогічною назвою для вас, якщо вона існує. Це запобігає багато коду стилю зворотного дзвінка, що покращує читабельність.

Ви також можете налаштувати клас Luca.Events для публікації подій на глобальному каналі публікації / підписки, що полегшує побудову великого додатка та сприяє взаємодії між модулями.

Самоцвіт Рубі

Luca був розроблений спеціально під час роботи з API Rails та Sinatra, і завдяки цьому в даний час оптимізований під конкретний стек, але він жодним чином не замикає вас на певному сервері.

Luca розповсюджується як частина Ruby Gem, налаштована для роботи над конвеєром активів, або як завантажений JS-файл.

Вам не потрібно використовувати Rails або Sinatra. Але якщо ви це зробите, я включив багато корисних речей:

  • Файли з розширенням .luca обробляються як HAML зі змінною інтерполяцією стилю JST. (еквівалентно .jst.ejs.haml) трубопроводом активів
  • Тестовий ремінь для веб-переглядача або безголових тестів на основі жасмину, а також безліч помічників для тесту на магістралі та підкреслення.
  • Кінцева точка API для набору інструментів розробки, що постачається з Luca (докладніше про це пізніше)
  • Кінцева точка API, яка дозволяє використовувати Redis в якості схеми зберігання без схем для Luca.Collection з мінімальною конфігурацією

Інструменти розробки

  • Програми Luca можуть увімкнути консоль кофе-скриптів у веб-переглядачі з певними помічниками та командами Luca, які допомагають контролювати, перевіряти, налагоджувати програми та компоненти Luca

Приклад Luca в консолі розвитку браузера, що працює на базі CoffeeScript

  • За допомогою редактора Rails Gem та редактора компонентів на базі CodeMirror Лука, ви можете редагувати вихідний код Luca Framework, а також конкретні компоненти програми безпосередньо в браузері, використовуючи Coffeescript. Ви побачите негайний зворотний зв’язок у відповідь на ваші зміни, коли екземпляри порушених об'єктів оновляться оновленим прототипом, і ви можете зберегти свої зміни на диску.

  • Тестер компонентів - це жива пісочниця для гри з компонентами, які складають вашу програму ізольовано. Він надає вам інструменти для зміни прототипу компонента, встановлення його залежностей та налаштування компонента. Компонент буде відтворюватися негайно щоразу, коли ви редагуєте. Ви можете переглядати та редагувати розмітку, яку генерує компонент, а також CSS безпосередньо у браузері та одразу ж бачити зміни. Це робить його дуже цінним інструментом експерименту.

  • Тестер компонентів незабаром інтегрується з Жасмином, щоб ви могли переглядати результати тестів компонентних одиниць у режимі реального часу, редагуючи їх код

Скріншот тестера компонентів

Luca - це незавершене виробництво, але підтримує стабільний API (ще не 1.0) і використовувався в кількох великих виробничих додатках. Це, безумовно, дуже впевнена структура, але я працюю над тим, щоб зробити її більш модульною. Я активно працюю над документацією та зразками компонентів.


11

Я є співавтором Chaplin і написав поглиблене порівняння між Chaplin.js та Marionette.js:

http://9elements.com/io/index.php/comppare-of-marionette-and-chaplin/

Це не "перестрілка", але намагається пояснити обидва підходи збалансовано.


Відповіді лише на посилання тут не підходять. Будь ласка, включіть у відповідь реальну відповідь.
Flimzy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.