Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Stratégies et architectures front-end modernes
Search
Nicolas Cava
May 20, 2015
Programming
0
39
Stratégies et architectures front-end modernes
Nicolas Cava
May 20, 2015
Tweet
Share
More Decks by Nicolas Cava
See All by Nicolas Cava
Second brain 🧠 How to delegate and focus to structure your mind
nicolascava
0
18
Responsive Web Design
nicolascava
0
47
Other Decks in Programming
See All in Programming
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
23
15k
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
130
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
220
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.3k
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
810
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
400
Anthropic Cookbook のおすすめレシピ
schroneko
7
980
Amazon SQSコンシューマー疎結合への旅 - 出張! #DevelopersIO IT技術ブログの中の人が語る勉強会 #3
quiver
0
270
使ってみよう Azure AI Document Intelligence
kosmosebi
2
320
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
380
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
2
770
Netty Chicago Java User Group 2024-04-17
sullis
0
180
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
Optimising Largest Contentful Paint
csswizardry
8
2.4k
Writing Fast Ruby
sferik
621
60k
Web Components: a chance to create the future
zenorocha
305
41k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
17
1.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
243
12k
4 Signs Your Business is Dying
shpigford
175
21k
The Invisible Side of Design
smashingmag
294
49k
The Straight Up "How To Draw Better" Workshop
denniskardys
227
130k
Transcript
Stratégies et architectures front-end modernes
Le front-end a une histoire longue et complexe dans le
développement d’application
Durant longtemps, le travail à faire sur le browser était
“suffisamment simple”
N’importe qui pouvait s’occuper de cela sans spécialisation quelconque
None
Beaucoup disait qu’un développeur, c’était simplement un graphiste travaillant sur
un autre média
Une spécialisation en JavaScript ? Ridicule !
User Interface n.m. Quelque chose que l’on peut hacker et
simplement faire fonctionner
Le JavaScript a changé la vision des gens à propos
du front-end
Ce langage “jouet” que tout le monde ridiculisait est devenu
une des forces qui régentent le web
L’apparition du cross-browser a apporté le besoin d’avoir des développeurs
front-end
Aujourd’hui, les développeurs front-end sont dans les profils les plus
recherchés au monde
Les deux UI layers
Malgré le “boom” de l’AJAX
None
Les front-ends ont toujours été vu comme ceux travaillant dans
une fenêtre de browser
HTML, CSS, et JavaScript étaient leurs priorités principales
Ils ne touchaient que rarement au back-end, uniquement pour vérifier
les outputs serveurs
Dans un sens, il y avait deux UI layers
Celui dans le browser lui-même
Et celui dans le serveur qui générait les données pour
le browser
Les front-ends avaient peu de contrôle sur l’UI layer back-end
Et ils étaient redevables de l’ opinion des back-ends sur
comment les choses devaient être faites
Une vision qui prenait rarement en considération les besoins front-
ends
None
Dans une architecture d’ application web, l’UI layer du browser
fut le seul domaine des front-ends
L’UI layer back-end était la place où les front-ends et
les back-ends se rencontraient
Et le reste de l’architecture serveur fut là où les
“tripes” de l’ application étaient
C’est là où se trouvaient le data- processing, le caching,
l’ authentication
Et toutes les autres fonctionnalités critiques de l’application
Dans un sens, l’UI layer back-end (souvent à travers les
templates) fut un léger layer dans l’ application serveur
Qui servait uniquement aux front- ends de couche intermédiaire à
la business logic qu’ils utilisaient
Donc, le front-end était le browser
None
Et tout le reste était le back-end
None
Malgré le lieu de rencontre central entre les deux métiers,
sur l’UI layer back-end
Ce fut assez proche de cela jusqu’ à 2011
L’arrivée de NodeJS
Quand NodeJS fut pour la première fois releasé
Cela a créé de l’enthousiasme chez les front-ends
Le même enthousiasme depuis que le terme AJAX fut déclaré
None
L’idée d’écrire du JavaScript sur le serveur (la place où,
auparavant, ils étaient “obligés” d’aller)
Fut libératrice
None
Ils ne seraient plus contraints de faire avec le PHP,
le Ruby, le Java, le Scala
Ou tout autre langage en plus de faire ce qu’ils
devaient faire en front-end
Si le serveur pouvait être écrit en JavaScript
Alors le set complet de connaissances en langage serait limité
à l’HTML, le CSS, et le JavaScript
Pour pouvoir délivrer une application complète
La promesse fut, et est toujours, très excitante
None
L’objectif derrière NodeJS n’a jamais été de tout remplacer sur
le serveur en JavaScript
Même si en NodeJS il est possible de faire de
puissantes applications
Cela n’en fait pas le choix pour toutes les situations
None
L’utilisation que les front-ends peuvent en faire c’est : libérer
l’UI layer back-end du reste du back- end
None
Avec un grand nombre de compagnies allant vers le SOA
et les interfaces RESTfuls
Il est maintenant faisable de séparer l’UI layer back-end dans
son propre serveur
Si toute la business logic clé de l’ application est
encapsulée dans des appels REST
Donc, tout ce dont les fronts-ends auraient besoin serait la
capacité de faire des appels REST pour builder une application
Est-ce que les back-ends se préoccupent de comment les utilisateurs
naviguent de page en page ?
Est-ce qu’ils se préoccupent de savoir si la navigation est
faite en AJAX ou en full refresh ?
Est-ce qu’ils se préoccupent de savoir si les front-ends utilisent
jQuery ou React ?
None
Ce pour quoi ils se préoccupent c’ est de comment
la donnée est stockée, retournée, et manipulée
De façon sécuritaire et consistante
Et c’est ici que NodeJS donne aux front-ends un grand
pouvoir
None
Les back-ends peuvent écrire leurs services REST dans n’ importe
lequel des langages de leur choix
Les front-ends peuvent utiliser NodeJS pour créer l’UI layer back-
end en pur JavaScript
Les front-ends peuvent fonctionner de la même manière qu’auparavant en
faisant uniquement des appels REST
Le front-end et le back-end ont maintenant une parfaite séparation
des concerns
Le front-end s’est étendu sur le serveur où l’UI layer
NodeJS existe maintenant
Et où le reste du stack reste sous la responsabilité
des back-ends
“Have no fear son.”
Cet empiètement du front-end dans ce qui était traditionnellement du
back-end est effrayant pour certains
None
Beaucoup d’entre eux pensent encore que JavaScript n’est pas un
vrai langage
Souvent, c’est à cause de cela que des organisations refusent
d’ adopter NodeJS
L’UI layer back-end est un terrain contesté entre les front-ends
et les back-ends
Il n’y a aucune raison pour que cela continue dans
ce sens
Et surtout, uniquement par le fait que cela a toujours
été ainsi
Encore aujourd’hui, dès que l’on entre sur le serveur, c’est
la responsabilité des back-ends
C’est une guerre de territoire purement et simplement
None
Cela n’a plus de raison d’être ainsi
Séparer l’UI layer back-end de la business logic back-end fait
beaucoup de sens dans une architecture large
Pourquoi les front-ends devraient se préoccuper du langage serveur nécessaire
pour accomplir des fonctions business critiques ?
Pourquoi ce genre de décision fuite dans l’UI layer back-end
?
Les besoins front-ends sont fondamentalement différents de ceux back-ends
Si vous aspirez aux concepts d’ architecture comme le Single
Responsibility Principle
La séparation des concerns
Et la modularité
Cela semble idiot que nous n’ ayons jamais effectué cette
séparation auparavant
A part qu’auparavant, NodeJS n’ existait pas
Il n’y avait pas de bonne option pour les front-ends
pour builder l’ UI layer back-end à leur manière
Si le back-end est en PHP, pourquoi ne pas utiliser
du PHP templating ?
Si le back-end est en Java, pourquoi ne pas utiliser
JSP ?
Il n’y avait pas de meilleur choix et les front-ends
faisaient à contrecoeur car il n’y avait pas de réelle alternative
Maintenant, c’est le cas
NodeJS donne la possibilité aux front-ends de contrôler l’ensemble du
UI layer
Ce qui leur permet de travailler de façon plus efficace
None
C’est leur métier de fournir une expérience front-end de qualité
Et cela leur est égal de savoir comment les back-ends
process la donnée
Dites aux back-ends de fournir la donnée que les front-ends
ont besoin, avec la business logic correspondante
Et les front-ends seront capables de concevoir de belles interfaces
performantes et accessibles aux utilisateurs
Utiliser NodeJS pour l’UI layer back-end libère les back-ends d’
une liste de problématiques qui ne les concernent et intéressent pas
Le front-end et le back-end ne parlent ensemble qu’en données
Ce qui permet une itération rapide des deux domaines sans
s’affecter tant que les interfaces RESTful restent intactes
L’isomorphisme et les Single Page Applications
Le JavaScript est maintenant un langage isomorphique
Cela veut dire que chaque ligne de code donnée (à
quelques exceptions près) peut s’exécuter à la fois sur le client et le serveur
Le server-side rendering est optimal par exemple pour le SEO,
le support d’anciens browsers, ou la perception utilisateur de la performance
L’isomorphisme s’accorde bien avec les Single Page Applications
Les Single Page Applications permettent des interactions clients riches et
une navigation plus rapide
Donc, pourquoi ne pas utiliser les deux concepts ensemble ?
Tous les bénéfices de chaque et sans avoir de duplication
de code
None
Du fait que l’isomorphisme englobe le client et le serveur,
quel est son spectre ?
Avant
None
2011
None
2013
None
Il est difficile au début de discerner les composantes d’une
architecture isomorphique
Du fait de l’environnement web, l’ HTTP a créé une
division artificielle qui ne fait aucun sens entre le client et le serveur au niveau logique
On a toujours fait en sorte de dupliquer la logique
sur le serveur car le browser était historiquement trop “instable”
Pas de support aux search engines et utilisateurs qui ne
supportaient pas de JavaScript, limitations technologiques diverses
Le browser ne pouvait contenir toute la logique d’application
Du fait, la logique d’application est en partie sur le
serveur, mais en développement d’application native, c’est un non-sens
En isomorphisme, du fait que le même codebase se retrouve
partagé entre deux environnements
Cela prend du sens et ouvre de nouvelles perspectives
On conserve la performance du client, et la stabilité du
serveur, pour le même objectif
Le client et le serveur ne sont plus que des
APIs différentes, avec des comportements différents, qui partagent la même logique
Et la même architecture
React et Flux
Du fait de tout cela, le bon vieux pattern MVC
ne fait plus de sens en isomorphisme
De nombreuses compagnies ont développé des frameworks ou librairies isomorphiques
React est une des librairies, développée par Facebook
On utilise React pour gérer la couche appelée View Layer
None
React est isomorphique, du fait qu’il utilise un Virtual DOM
pour pouvoir builder des composants d’ interface
Ce Virtual DOM n’est simplement qu’une abstraction du DOM en
JavaScript
Ce qui rend la possibilité de construire des composants DOM
sur le serveur également
De plus, Facebook ont développé React Native qui reprend ce
concept pour le développement d’ application native !
Cependant, React ne gère pas de router ou de logique
d’application
C’est pour cela que Facebook a créé Flux
Flux est une architecture d’ application basée sur l’ unidirectionnal
data-flow et le data-flow programming
None
Si un utilisateur interagit avec l’UI, une Action est créée
dans un Action Creator
L’Action est ensuite envoyée au Dispatcher, qui est essentiellement un
registre de callbacks
Le Dispatcher n’a pas d’ intelligence, mais il peut gérer
des mises à jour synchrones
Si des callbacks sont inter- dépendants, il est capable de
les lancer dans un ordre précis
Le Dispatcher peut être vu comme le hub de l’application
Le callback retourne l’Action aux Stores avec un Action Type
Les Stores sont le coeur de l’ application. Ce sont
eux qui détiennent l’état de l’application
Ils communiquent avec les APIs pour demander les données nécessaires
à l’application
Les Stores sont proches du Model dans un concept MVC
Ils s’enregistrent avec le Dispatcher en fournissant des callbacks
Chaque Store gère son propre domaine d’application
Du fait que le Dispatcher peut rendre les callbacks synchrones,
les Stores peuvent attendre qu’un autre finisse avant de processer
Les Stores ont une sorte de switch statement sur l’Action
Type
Quand les Stores ont fini de processer, un change event
est broadcaster
En haut de la hiérarchie du View Layer, se trouvent
des Controller- views qui handlent les change events
Ils peuvent récupérer les données qu’ils ont besoin via des
méthodes publiques fournies par les Stores
Ensuite, les Views se self-render elle-mêmes à partir d’un seul
objet de données
Il est possible d’avoir plusieurs Controller-views dans la hiérarchie, mais
uniquement si nécessaire
Une Action peut être créée par un retour serveur autant
que par une interaction utilisateur sur l’UI
None
Dans cette logique, les Stores communiquent avec les APIs et
signent les contrats correspondants
Le modèle de données peut donc être plus ou aussi
permissif que le contrat de l’API, selon les besoins de l’application
Dans le cas de l’isomorphisme, une requête HTTP peut initiée
une Action, mais le flow reste le même
En somme, les front-ends n’ont jamais été à pleine capacité
avant l’avènement de l’isomorphisme
Aujourd’hui, ils sont capables de fournir une UI robuste et
performante, bâtie sur le même codebase, avec la même architecture
De plus, les back-ends seraient soulagés de la partie UI
layer back-end
Et pour se focaliser sur leur vrai corps de métier
La communication entre les deux spécialisations serait simplement normalisée par
les données
Chaque partie pourrait itérer sans attendre ou impacter l’autre
Merci !