Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Architecture modulaire grâce à Symfony et l'éco...

Architecture modulaire grâce à Symfony et l'écosystème open-source

Les avancées présentes dans les dernières versions de Symfony et la maturité de l'écosystème open-source permettent de réaliser des architectures modulaires de grande qualité, avec des paradigmes de développement différents. Nous verrons, avec le case study d'AudienceHero, comment tirer parti des meilleures briques logicielles (Autoconfiguration, Autowiring, ApiPlatform, React Admin, etc.) afin de créer des systèmes modulaires complets.

Marc Weistroff

March 29, 2018
Tweet

More Decks by Marc Weistroff

Other Decks in Programming

Transcript

  1. Mopro Boite à outils Marketing pour les créateurs indépendants Mission:

    Remplir les besoins Marketing de 80% des créateurs indépendants.
  2. Mopro Fan Management Segmenting Newsletter Media Management Free Downloads Podcasts

    Video maker AudioClip Import Mailchimp Reports Dashboard + 1 tonne de features
  3. 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.
  4. Module Partie du code source d’un logiciel qui peut être

    développée indépendamment Exemple: Bundle Symfony
  5. 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.
  6. Symfony > 3.3 - Flex (Bundle Autoregistration) - DependencyInjection -

    autowiring - autoconfiguration - registerForAutoconfiguration
  7. Autowiring / Autoconfigure - Simplification MAJEURE :) - 0 config

    :) - Des centaines de lignes de code enlevées :)
  8. 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
  9. AudienceHero - Private Metadata - Public Metadata - Links -

    Sitemaps - Data enrichers - Data aggregators - Data Importers - Message queues - Emails - Data extractors
  10. 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/
  11. 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/
  12. 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
  13. Backend - Monorepo - 63 dépendances Comment séparer les dépendances

    entre les différents composants ? ‣ wikimedia/composer-merge-plugin
  14. SyliusMailerBundle - Indépendant du reste de Sylius - Entièrement customisable

    (Adapter / Sender / ...) - Architecture idéale pour cette tâche https://github.com/sylius/sylius
  15. La façon AudienceHero - Supprime le fichier de configuration -

    Utilise registerForAutoconfiguration - Une classe par email.
  16. Back/Front office – FrontOffice: SPA – BackOffice: SPA Comment intégrer

    des modules dans des applications compilées avec Webpack ?
  17. Back/Front office – registerForAutoconfiguration :) – Génération de code :)

    – Symfony / Webpack Encore https://github.com/symfony/webpack-encore
  18. NON - Durée du projet? - Luxe de phases de

    réflexions? - Plusieurs équipes sur des sujets différents? - Maturité sur le projet?
  19. OUI - Core -> Extensions - Indépendance totale des fonctionnalités

    - Projet au long cours - Customisation totale - Plateforme