84

Ember.js ответ на почти все вопросы - java script frameworks day 2014

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 2: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Привет, я Андрей!

Программирую на чем угодно, люблю JavaScript и веб-технологии

Соведущий Frontend UA Hangout

Архитектор в очках и с бородой

Page 3: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 4: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Холивары!

Page 5: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

DOM + Эффекты + Ajax

jQueryPrototypeDOMAssistantMooTools

Page 6: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Модули + Widgets

Yahoo UIGoogle ClosurejQuery UIExt JS

Page 7: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Desktop UI

Page 8: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC / MVP / MV*

BackboneKnockoutAngularEmberReact/Om

Page 9: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

HTML

Page 10: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Ajax

Page 11: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Острова интерактива

Page 12: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 13: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Моностраничные приложения

Page 14: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Поле Боя MV*

Page 15: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Веб-клиенты

Page 16: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 17: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 18: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 19: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 20: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

2011

Page 21: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Yehuda Katz

Page 22: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

C

V

M

Page 23: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

C

V

M

DAO

DAOUNIT TESTABLE

Page 24: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

C

V

M

Page 25: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

C

V

M

Page 26: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

C

?

M

Page 27: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

M

C

?

Page 28: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Logic-less Templates

2009 Chris Wanstrath - Mustache.rb

Jan Lehnardt - Mustache.js

<h1>Hello, {{username}}</h1>

Page 29: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 30: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 31: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Tom Dale

Page 32: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Идея - 2011

Run Loop - SprouteCoreMVC - CocoaLogic-less Templates + Helpers - HandlebarsData-binding - MetamorphConvention over Configuration - Rails

Page 33: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 34: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Идея - 2011

Run LoopCocoa MVCLogic-less Templates + HelpersData-bindingConvention over Configuration

Page 35: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Идея - 2013

Run LoopCocoa MVCLogic-less Templates + HelpersData-bindingConvention over ConfigurationRouting and Application StateData AccessComponents

Page 36: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 37: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

RouteModelControllerViewTemplate

Page 38: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

1. URL - царь горы

Page 39: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

Смена URLа - событие

Page 40: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

Смена URLа - событие

URL - модуль

Page 41: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

Смена URLа - событие

URL - модуль

URL - глобальное состояние

Page 42: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

https://myapp.com/posts/1

App.Router.map(function () { this.resource('posts', function () { this.resource('post', { path: ':post_id'}); });});

Page 43: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

https://myapp.com/posts/1

PostsRoutePostsController<posts> {{outlet}}

PostRoutePostController<post>

Page 44: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

var Post = DS.Model.extend({ title: DS.attr('string') body: DS.attr('string') published: DS.attr('date')});

Page 45: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

var PostsRoute = Ember.Router.extend({ model: function () { return this.store.find('post'); }});

var PostsController = Ember.ArrayController.extend({ … });

Page 46: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

<ul> {{! posts.hbs }}{{#each post in model}}

<li> {{#link-to 'post' post}} {{post.title}} {{/link-to}} </li>

{{/each}}</ul> {{outlet}}

Page 47: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

var PostRoute = Ember.Router.extend({ model: function (params) { return this.store.find('post', params.post_id); }});

var PostController = Ember.ObjectController.extend({ … });

Page 48: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

{{! post.hbs}}<h2>{{title}}</h2>

<p>{{format-date published}}</p>

<div>{{body}}

</div>

Page 49: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

2. АсинхронностьPromise

Page 50: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Promises

var PostRoute = Ember.Router.extend({ model: function (params) { return this.store.find('post', params.post_id); }});

Page 51: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

3. Dependency Injection

Page 52: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Dependency Injection

var PostRoute = Ember.Router.extend({ model: function (params) { return this.store.find('post', params.post_id); }});

Page 53: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Dependency Injection

var Session = Ember.Object.extend({...});

App.register('session:main', Session);App.inject('session:main', 'store', 'store:main');App.inject('controller', 'session', 'session:main');App.inject('route:app', 'session', 'session:main');

// внутри PostEditController this.session.get('isLoggedIn')

Page 54: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

4. Кодогенерация

Page 55: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

URL

var PostsRoute = Ember.Router.extend({ model: function () { return this.store.find('post'); }});

var PostsController = Ember.ArrayController.extend({});

Page 56: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

5. Объектная модель

Page 57: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Объектная модель

НаследованиеМиксиныПрокси-объектыЗависимые свойстваГеттеры-сеттерыАлиасы...

Page 58: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Объектная модель

Uniform access principle:obj1 = { inner: { prop: 'value' } };obj2 = Ember.Object.create({ inner: { prop: 'value' }});Ember.get(obj1, 'inner.prop');Ember.get(obj2, 'inner.prop');obj2.get('inner.prop');someOtherObject.get(computed.property')

Page 59: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Объектная модель

var Person = DS.Model.extend({ first: DS.attr('string'), last: DS.attr('string'),

full: function () { return this.get('first') + ' ' + this.get('last') }.property('first', 'last')});tom.get('full') // => 'Tom Dale'

Page 60: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

6. MVC

Page 61: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

https://myapp.com/posts/1

PostsRoutePostsController<posts> {{outlet}}

PostRoutePostController<post>

Page 62: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Init

ViewTemplateModel

Route

Controller

Page 63: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Init

ViewTemplateModel

Route

Controller

Page 64: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Init

ViewTemplateModel

Route

Controller

Page 65: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Init

ViewTemplateModel

Route

Controller

Page 66: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Data

ViewTemplateModel

Route

Controller

Controller View

Page 67: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Events

ViewTemplateModel

Route

Controller

DOMActions

Actions

Actions

Page 68: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

ModelController

Route

Application Route

RouteRoute Route

ViewView View

View View

ModelControllerModelController

ViewView View

View ViewView

View View

View View

Page 69: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

MVC

Page 70: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

7. Компоненты

Page 71: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Компоненты

{{#my-tag param=value}} …{{/my-tag}}

{{! components/my-tag.hbs}}... {{yield}} …

MyTagComponent = Ember.Component.extend

Page 72: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Angular's bi-directionally bound isolate scope, transcluded, element restricted directives

Ember Components

Page 73: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

За кадром

Поддержка тестированияИнструменты

Ember Inspector - Chrome, FirefoxEmber-CLI

ember new myappBroccoli

ES6, HTMLBars, JSON API

Page 74: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Заблуждения

Не может быть встроен, все или ничегоНе имеет DIНельзя тестироватьСложно начинатьМонолитный

Page 75: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

А холивар?голос из зала

Page 76: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Angular JS

Routing / Nested ViewsКонсистентное APIПростые компонентыМеньше граблейБольшие Open-Source проекты

Angular 2.0догонит Эмбер по ряду пунктов :)но будет несовместим с Angular 1.x :(

Page 77: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Backbone + React/OM

сравнимая с HTMLBars производительностьобщая структура проекта, не “островки архитектуры в море плохого кода”

Эмбер начинают использовать с персистентными структурами данных

Page 78: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Не повторяет ошибок других

Принимает решения за вас BBReasonable Defaults for 95% case BB ngDI с барьерами ngПонятные директивы ngОдноразовая загрузка данных allСвой рендерринг-пайплайн Knockout ng

Page 79: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Модель разработки - PostgreSQL

Tilde, Yapp, Prototypal, Adepar, Instructure, etc.

Page 80: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Релизы по расписанию

Page 81: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Компании

1. Apple2. Google3. Yahoo4. Twitter5. Microsoft6. Groupon7. Square8. Zendesk

9. Ballanced10. Nitrous.io11. USPO12. DoD13. NBCNews14. Netflix

Page 82: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

Проекты

1. Discource2. Ballanced3. Travis CI4. Ghost

Page 83: Ember.js   ответ на почти все вопросы - java script frameworks day 2014
Page 84: Ember.js   ответ на почти все вопросы - java script frameworks day 2014

?