Architecture modulaire
grâce à Symfony
et l'écosystème
Open-Source
Slide 2
Slide 2 text
Marc Weistroff
Architecte Web
Freelance
https://marc.weistroff.net
https://github.com/marcw
@de_la_tech
Label Manager
POLAAR
https://www.polaarsounds.com
@polaarsounds
Slide 3
Slide 3 text
Dans l'épisode
précédent...
Slide 4
Slide 4 text
2014 Free-
lance
Slide 5
Slide 5 text
2014
Slide 6
Slide 6 text
2015
SaaS?
SaaS!
Slide 7
Slide 7 text
2016 Mopro
Slide 8
Slide 8 text
Mopro
Boite à outils Marketing pour les créateurs
indépendants
Mission: Remplir les besoins Marketing de
80% des créateurs indépendants.
Slide 9
Slide 9 text
Mopro
Fan Management
Segmenting
Newsletter
Media Management
Free Downloads
Podcasts
Video maker
AudioClip
Import Mailchimp
Reports
Dashboard
+ 1 tonne de features
Architecture
Art de concevoir, de construire et de transformer des édifices
et des espaces extérieurs selon des critères esthétiques et des
règles sociales, techniques, économiques, environnementales
déterminées.
Façon dont une chose est ordonnée.
Slide 17
Slide 17 text
Module
Partie du code source d’un logiciel qui peut être développée
indépendamment
Exemple: Bundle Symfony
Slide 18
Slide 18 text
Architecture Modulaire
Se réfère à la conception de tout système composé de
composants séparés qui peuvent être connectés ensembles.
La beauté d'une architecture modulaire est que vous pouvez
remplacer ou ajouter n'importe quel composant (module) sans
affecter le reste du système.
Slide 19
Slide 19 text
Architecture Intégrée
Opposée à l'architecture modulaire
Aucune division claire n'existe entre les composants
Autowiring / Autoconfigure
- Simplification MAJEURE :)
- 0 config :)
- Des centaines de lignes de code enlevées :)
Slide 25
Slide 25 text
No content
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
registerForAutoconfiguration
- Permet l'autoconfigure des EventSubscriber
- Plus rien ne sera pareil :)
- Autoconfigure pour VOUS
- Très utilisé dans AudienceHero
- Exemple: Traitement des fichiers dans AudienceHero
- Behaviors
- Mailer
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
No content
Slide 34
Slide 34 text
AudienceHero
- Private Metadata
- Public Metadata
- Links
- Sitemaps
- Data enrichers
- Data aggregators
- Data Importers
- Message queues
- Emails
- Data extractors
Slide 35
Slide 35 text
Ecosystème
Slide 36
Slide 36 text
API Platform
Slide 37
Slide 37 text
ApiPlatform
- Meilleure solution OSS pour les API
- Intelligent
- Standards ouverts
- Architecture Top
- AudienceHero ne serait pas là sans ApiPlatform
https://github.com/api-platform/core/
Slide 38
Slide 38 text
React-Admin
Slide 39
Slide 39 text
React-Admin
- Admin Single Page App (SPA)
- Customisable
- Material UI
- Architecture frontend de très haut niveau
- React + Redux + Redux-Saga + Redux-Forms
https://github.com/marmelab/admin-on-rest/
Slide 40
Slide 40 text
Enqueue
Slide 41
Slide 41 text
Enqueue
- Abstraction de message queues
- Portage PHP de standards java (cross-polination !)
- AMQP, Amazon SQS, Google PubSub, Redis, Kafa, DBAL
- 1 seul process worker possible
http://github.com/enqueue/enqueue
Slide 42
Slide 42 text
Dépendances
Slide 43
Slide 43 text
Backend
- Monorepo
- 63 dépendances
Comment séparer les dépendances entre les différents
composants ?
‣ wikimedia/composer-merge-plugin
Slide 44
Slide 44 text
No content
Slide 45
Slide 45 text
No content
Slide 46
Slide 46 text
No content
Slide 47
Slide 47 text
Backend
- composer install / composer update
- Un seul repertoire vendor
Frontend
- yarn
- Un seul repertoire node_modules avec toutes les
dépendances
Slide 52
Slide 52 text
Emails
Slide 53
Slide 53 text
1. Prototype
Slide 54
Slide 54 text
No content
Slide 55
Slide 55 text
2. Consolidation
Slide 56
Slide 56 text
No content
Slide 57
Slide 57 text
No content
Slide 58
Slide 58 text
No content
Slide 59
Slide 59 text
3. Dégradation
Slide 60
Slide 60 text
No content
Slide 61
Slide 61 text
No content
Slide 62
Slide 62 text
Spaghetti :(
Slide 63
Slide 63 text
4. Modularisation
Slide 64
Slide 64 text
SyliusMailerBundle
- Indépendant du reste de Sylius
- Entièrement customisable (Adapter / Sender / ...)
- Architecture idéale pour cette tâche
https://github.com/sylius/sylius
Slide 65
Slide 65 text
No content
Slide 66
Slide 66 text
No content
Slide 67
Slide 67 text
No content
Slide 68
Slide 68 text
La façon AudienceHero
- Supprime le fichier de configuration
- Utilise registerForAutoconfiguration
- Une classe par email.
Slide 69
Slide 69 text
No content
Slide 70
Slide 70 text
No content
Slide 71
Slide 71 text
No content
Slide 72
Slide 72 text
Back/Front
office
Slide 73
Slide 73 text
Back/Front office
– FrontOffice: SPA
– BackOffice: SPA
Comment intégrer des modules dans des applications
compilées avec Webpack ?
Slide 74
Slide 74 text
Back/Front office
– registerForAutoconfiguration :)
– Génération de code :)
– Symfony / Webpack Encore
https://github.com/symfony/webpack-encore
Slide 75
Slide 75 text
No content
Slide 76
Slide 76 text
No content
Slide 77
Slide 77 text
No content
Slide 78
Slide 78 text
No content
Slide 79
Slide 79 text
No content
Slide 80
Slide 80 text
No content
Slide 81
Slide 81 text
No content
Slide 82
Slide 82 text
Archi cool ?
Slide 83
Slide 83 text
NON
- Durée du projet?
- Luxe de phases de réflexions?
- Plusieurs équipes sur des sujets différents?
- Maturité sur le projet?
Slide 84
Slide 84 text
OUI
- Core -> Extensions
- Indépendance totale des fonctionnalités
- Projet au long cours
- Customisation totale
- Plateforme
Slide 85
Slide 85 text
AudienceHero
https://github.com/audiencehero/audiencehero
Les contributions sont bienvenues :)
- Code (Backend / Frontend)
- Issues
- Documentation
- Sponsoring