Clean architectures

1 680 vues

Publié le

Publié dans : Technologie
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 680
Sur SlideShare
0
Issues des intégrations
0
Intégrations
119
Actions
Partages
0
Téléchargements
64
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Clean architectures

  1. 1. G. Saint Etienne & Thierry Crostrès fortement inspiré par Uncle Bob*
  2. 2. **Disposition, ordonnance dun édifice.Architecture Foundation London, by Zaha Hadid
  3. 3. *
  4. 4. **Uncle Bob says
  5. 5. *
  6. 6. *
  7. 7. *
  8. 8. dependencies between softwarepackages in the Gentoo Linux operatingsystem. In total there are 14319 packageswith 63988 dependencies between them!
  9. 9. *
  10. 10. *
  11. 11. **A quick view
  12. 12. **Quelques rappels*Êtes vous S.O.L.I.D. ?
  13. 13. **Object Encapsulation*Inheritance*Polymorphism*Single Responsability Principle
  14. 14. **Open Close Principle*Ouvert aux extensions / Fermé aux modifications*Interface Segregation Principle*Un composant ne doit jamais être forcé de dépendre d’une interface (ou unpackage) qu’il n’utilise pas*Dependency Inversion Principle*Les éléments de « haut » niveau ne doivent pas dépendre deséléments de « bas » niveaux*Les abstractions ne doivent pas dépendre des détails (implémentations)
  15. 15. **Du spaghetti …*… Au multiples couches
  16. 16. *
  17. 17. **La granularité de la réutilisation est lagranularité de ce que est livré/livrable.*Ne ré-utilisez rien qui ne soit livrableindépendamment.*Ré-utilisez si vous pouvez vous sentir commeun simple consommateur d’un livrable.
  18. 18. **Ensemble dans le même package si (ré)utilisésen même temps
  19. 19. **Si 2 classes changent ensemble alors ellesdevraient se retrouver ensemble dans le mêmepackage.*Similaire à Open Close Principle*Gain en maintenabilité.
  20. 20. *
  21. 21. **Stable Dependencies Principle (SDP)*Moins un package est stable, moins il devrait y avoir dedépendances vers lui (moins de couplage).*Stable Abstractions Principle (SAP)*Les packages ne contenant que des abstractions doivent êtreles plus stables possibles.*Forte Cohérence Interne / Faible Couplage Externe
  22. 22. ConceptsdarchitectureConceptsdimplémentationDétailsdimplémentationDépendancesNe dépendent quedautres conceptsdarchitecturePeuvent dépendrede conceptsdarchitecture ou dedautres conceptsdimplémentationDépendent deconceptsdarchitecture et deconceptsdimplémentationNiveaudabstractionEntièrementabstraitsMélangedabstraction et dedétailsEntièrementcomposés de détailsNiveau de stabilité Stabilité maximale Partiellement stableChange au moindrechangement dans lelogiciel
  23. 23. **Let’s code for real
  24. 24. **A good architecture allows major decisions to be defered*What and how to instanciate*How display it*How store it ….*A good architecture maximes the number of decision notmade
  25. 25. **Independant of Frameworks*Fully and Unit Testable… and very fast!*Independant of UI*Independant of Database*Independant of any External Agency
  26. 26. **A l’extérieur: l’infrastructure, les services externes*la persistence, l’UI en font partie*A l’intérieur: la description des comportements etdes entités*Dépendances: de l’extérieur vers l’intérieurseulement
  27. 27. *Les entités*On en parle demain dans « TDD vs DBO »*Uses cases*Ce sont des « Application business rules »*Jamais impacté par les changements externes (UI, DB, etc…)*Interface Adapters*Convertissent les entités vers des formatsadaptés aux infrastructures*Frameworks & Drivers*Fournissent des services (persistence,présentation, quincaillerie en tous genre)
  28. 28. * Always remember
  29. 29. ** http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html* http://blog.kamil.dworakowski.name/2010/08/from-layers-to-hexagon-architecture.html* http://agilitateur.azeau.com/post/2012/03/05/Conception-logicielle* http://www.objectmentor.com/resources/articles/granularity.pdf* http://java.boot.by/scea5-guide/ch01.html* Dojos* https://github.com/martinsson/DevelopersAnonymous/blob/master/c%23/GuildedRose/GildedRose.cs

×