Skip to content

Latest commit

 

History

History
331 lines (214 loc) · 16 KB

conception.md

File metadata and controls

331 lines (214 loc) · 16 KB

🧱 Conception

Général

Clean Archiecture

Couplage

Pourquoi préférer un système faiblement couplé ("loose coupling") ?

Plus petit est le système à maintenir plus rapides sont les développements.

Plus petit est le système à maintenir plus rapide et simple sont la rédaction et l'exécution des tests.

Des systèmes couplés sont plus complexes à maintenir car faire évoluer un sous-ensemble du système requiert de faire évoluer les autres sous-ensembles dépendants.

Dans un système faiblement couplé, l'impact d'un défaut est plus limité.

Plus petit est le système mieux il sera compris.

Des systèmes couplés sont plus complexes à comprendre en raison du nombre d'élément à considérer.

Un système couplé sera plus facile à migrer dans un autre système.

Des systèmes couplés sont moins performants car leur performance est limité à celle du moins performant d'entre eux.

Loi de Déméter (1987) : un objet A peut appeler une méthode d'un objet B, mais A ne peut pas utiliser B pour accéder à un troisième objet via B et requérir ses services. Le système est alors plus maintenable car A ne dépend pas de la structure interne de B. B peut alors faire évoluer sa structure interne indépendament de A.

Ressources

CQRS

Pourquoi ?

Dans un système complexe, le processus métier ne peut être connu de tous de manière exhaustive. Dès lors, il convient d'encapsuler les différentes opérations au sein d'abstractions. On parle de Commande pour les ordres envoyés au système et de Queries pour les questions posées au système.

Distinguer Commandes et Queries permet de faire émerger un système CQS et non CQRS. C'est la distinction de la localisation de la donnée et des modèles ainsi mis à jour qui donnent la lettre R au CQRS.

Références

Dette technique

Domain Driven Design

Aggregats

FAQ

Comment gérer les dépendances entre agrégats ?

Soient deux agrégats A et B où B possède une référence à A via l'id de ce dernier. Alors les commandes modifiant B peuvent s'assurer de l'existence de A (que A et B appartiennent au même BC ou non). Exemple : ARepository.verifierExistence(commandeModifiantB.IdentifiantDeA)

Bounded contexts

Context map

Domain events

Implémentations

Event Sourcing

Event Storming

Que faire de la documentation écrite avant l'Event Storming ?

  • Prendre connaissance de cette documentation par respect pour ceux qui l'ont écrite
  • Elle reste majoritairement un sunk cost
  • L'artefact nécessaire à la production logicielle est visuelle et évènementielle, pas "documentative"
  • La documentation est utile pour rentrer dans les détails, pas pour une vue générale

Comment découvrir les pivotal events ?

D'après les discussions entre participants quand deux participants sont en désaccords sur le contenu nécessaire au déclenchement d'un évènement.

Quand deux personnes modifient un même évènement.

Quand le pattern Draft/Executable émerge, c'est-à-dire d'un côté un métier dont le cycle de vie concerne un version "brouillon" et de l'autre un métier dont le cycle de vie concerne une version "publiée"

Quand mettre à jour l'Event Storming

Le stocker pour ne pas frustrer les gens.

Redémarrer from scratch quand on fait une rétrospective du modèle.

En numérique, c'est très difficile de le finir mais facile à mettre à jour.

Extreme Programming

Functional programming

Hexagonal Architecure

Microservices

Mob programming

Modélisation

Monolithe

Refactoring et dette technique

SOLID

Tests

Pourquoi écrire des tests automatisés ?

Permet de prévenir les régressions en cas de modification du code testé

Permet de documenter la fonctionnalité testée

Références

Mocks

TDD