"What we've learnt from Ember.js developing our new product" by Guillaume Potier

37
What we've learn from Ember.js after 2 months developing our new product MVP Presentation The Family - 9 avril 2015

Transcript of "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Page 1: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

What we've learn from Ember.js after 2 months developing our

new product MVP

Presentation The Family - 9 avril 2015

Page 2: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

Guillaume Potier

Co founder & CTO @guillaumepotier

Nicolas Chenet

Javascript developer @nicolaschenet

Page 3: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

http://wisembly.com

Page 4: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

http://getsolid.io

Page 5: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

4,9 yrs old

38 employees

10 tech + product

Page 6: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

BackboneJS

BackboneLayoutmanager

BackboneRelational

Custom

Mocha

Expect

Phantomjs

Gulp

Bash

Symfony2 - MySQL - Redis - RabbitMQ

Page 7: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Welcome to the javascript Jungle!

Page 8: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Welcome to the javascript Jungle!

Page 9: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Welcome to the javascript Jungle!

Page 10: "What we've learnt from Ember.js developing our new product" by Guillaume Potier
Page 11: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

About us

BackboneJS

BackboneLayoutmanager

BackboneRelational

Custom

Mocha

Expect

Phantomjs

Gulp

Bash

EmberJS

Ember-CLI

Ember Data

Phantomjs

Symfony2 - MySQL - Redis - RabbitMQ

Page 12: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ce qu’on a choisi

Because it’s a matter of choice

Page 13: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ce qu’on a choisi

13

Ember JS

Ember CLI

• The command line interface for ambitious web applications.

Ember Data

• A data persistence library for Ember.js

Because it’s a matter of choice

Page 14: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS ?

En bref…

Page 15: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS ?

15

Framework pour Single Page Applications

Model / View / Controller

• Model: Classe avec propriétés et comportements (data)

• View: Interactions avec le DOM / Templates …

• Controller: Présentation des datas / Actions …

Rôle important des routes

• Responsable du fetch des datas

• Nesting

• Application state

En bref…

Page 16: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI

Pourquoi on aime ?

Page 17: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS Pourquoi on aime ?

17

TOMSTER !

Page 18: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI Pourquoi on aime ?

18

Data Binding et Computed Properties / Observers

• L’interface reflète en permanence la data

• Pas besoin d’écrire des listeners pour mettre à jour les

templates => gain de temps / moins de boilerplate

• Computed properties => des propriétés “fonctions”

• Observers => Réaliser des traitements dès qu’une propriété est

mise à jour

Page 19: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI Pourquoi on aime ?

19

Backburner, formerly “The Run Loop”

• Not really a loop

• Tout les traitements sont organisés dans des files spécialisées

• Ex: on s’assure que toutes les opérations de sync soient

terminées avant de rendre les views

sync actionsrouter

transitionsrender

after

renderdestroy

Page 20: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI Pourquoi on aime ?

20

Les components

• Approche DRY et “organique” de l’interface

• Les éléments d’interface sont responsables d’eux-même et sont

capables d’interagir avec l’extérieur

• Simple à mettre en place

Les actions, mieux que ng-click

• Equivalent de ng-click mais pas que

• Traitement “smart” des actions grâce au bubbling

Page 21: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI Pourquoi on aime ?

21

Ember Inspector, plugin Chrome incontournable

• Arbre des vues et templates

• Arbre des routes

• Représentation des datas, model par model

• Liste des Promises

• Performances de rendu

• Les modules chargés

• …

Page 22: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS + Ember CLI Pourquoi on aime ?

22

Convention over Configuration

• Une architecture d’application structurée

• Des comportements “automagiques”, qui sauvent du temps et

pas mal de boilerplate

• => Fast developer onboarding

• => A mesure que l’app grossit en taille et complexité, code

toujours clair, identique

Page 23: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS

Un hamster, c’est parfois difficile à apprivoiser

Page 24: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember JS

24

La fameuse Learning Curve

• Où je range mon code ? Je fais un MIXIN ou un SERVICE ?

• Il s’est passé quoi là ?

• La bipolarité du dévelopeur débutant avec Ember

The “Ember way” to do things

• Parfois on peut se sentir “enfermé”

• Les overrides ne sont pas forcément toujours évidents

I18n ?

• Pas de support natif

• Les plugins existants ne correspondaient pas à notre méthode

• Création d’un plugin => ember-gettext

Un hamster, c’est parfois difficile à apprivoiser

Page 25: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember CLI

En bref …

Page 26: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember CLI

26

Interface en ligne de commande pour les applications Ember JS

Inspiré par Ember App Kit

Structure de projet

Assets pipeline + Server

Gestion des environnements (PROD / DEV / TEST)

Rajoute de la convention dans la convention \o/

Et plein d’autres trucs…

En bref…

Page 27: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember CLI

Pourquoi on aime ?

Page 28: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember CLI

28

The future is now

• Transpiler ES6: imports / exports sans passer par requireJS

Générateurs et blueprints

• “yeoman-like”: générer des routes / controllers / … en ligne de

commande

• basés sur des blueprints personnalisables: s’adapte à vos

besoins

• Up de productivité et de qualité du code

Server + Live reload

Des tests facilités

• Built in QUnit, Ember Testing, Ember QUnit

Pourquoi on aime ?

Page 29: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data

En bref…

Page 30: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data En bref…

30

Models

• Représentation des datas sous forme d’“entités”

• Relations

Adapters

• Abstraction des méthodes de fetch, de sauvegarde

des models

• 1 adapter global ou 1 adapter par model

• RESTAdapter / LSAdapter / FIXTUREAdapter / …

Store

• Gère le cycle de vie des models

• Communique avec les adapters à travers une API

unifiée

• Automatic caching

Page 31: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data

Pourquoi on aime ?

Page 32: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data Pourquoi on aime ?

32

Adapters => Quick prototyping

• Models pour lesquels l’API existe / est prête => RESTAdapter

• Model sans API existante => FIXTUREAdapter

• Quand l’API est prête, il “suffit” de changer l’adapter, et voilà

Abstraction des calls à l’API

• Ex: pour fetch 1 meeting => this.store.find(‘meeting’, 123) (peu

importe l’adapter)

• Les URLs sont buildées par Ember Data

• Force la rigueur

Records flags

• record.isDirty => des changements pas synchro

• record.isNew, record.isSaving, etc…

Page 33: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data

Les trucs moins cool

Page 34: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Ember Data Les trucs moins cool

34

Très très “opinionated”

• Et en plus pas du tout permissif “out of the box” => certains ont

encore mal au crâne

• Difficile à domestiquer avec une API pas forcément en phase

avec son interprétation de la JSON API

Certaines parties des adapters et du store ont du être

réécrites

Essentiellement fait pour la synchro des datas

• Je fais comment si j’ai pas que du GET / POST / PUT / DELETE

sur un model, mais que j’ai besoin de faire une “action” =>

augmente le store ;)

Page 35: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Pour finir

Parce qu’il faut bien une fin

Page 36: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Pour finir

36

Alors heureux ?

• Venant d’un univers Backbone, OUI !

• Moins de Boilerplate

• Code plus concis

• Meilleure qualité

• Tests plus faciles / rapides à écrire

Ce qui a été le plus douloureux ?

• Essentiellement la couche data et comprendre la bête “de

l’intérieur” pour expliquer la magie

Si c’était à refaire, toujours Ember ? Angular ?

• EMBER !

• Cadre / Réel framework qui apportent des fondations robustes

à une app

Parce qu’il faut bien une fin

Page 37: "What we've learnt from Ember.js developing our new product" by Guillaume Potier

Nicolas Chenet

[email protected]

@nicolaschenet

wisembly.com

merci, à bientôt !Guillaume Potier

[email protected]

@guillaumepotier