SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Clean Architecture &Clean Architecture &Clean Architecture &Clean Architecture &
Code patrimonialCode patrimonialCode patrimonialCode patrimonial
Karol DelandKarol DelandKarol DelandKarol Deland
PrésentationPrésentationPrésentationPrésentation
► Conseiller en architecture logicielle
► Passionné d’architecture (oui je
parle de code même le midi…)
► Mon rôle est d’aider les équipes de
développement à livrer de la qualité
plus rapidement
www.linkedin.com/in/karoldeland
@karoldeland
http://pragma3.com
iAiAiAiA Groupe FinancierGroupe FinancierGroupe FinancierGroupe Financier
Une approche humaine
Adoption du Lean et de l’agilité depuis 2012
Plus de 1000 personnes en TI
En route vers le DevOps, le cloud et l’agilité à l’échelle
Pourquoi cette présentation?Pourquoi cette présentation?Pourquoi cette présentation?Pourquoi cette présentation?
Pour faire cesser l’entropie de
votre code patrimonial, vous aurez besoin
de vos meilleurs développeurs !
AgendaAgendaAgendaAgenda
Contexte du projetContexte du projetContexte du projetContexte du projet
Trois défis :Trois défis :Trois défis :Trois défis :
1- Modifications itératives
2- Réutilisation de code patrimonial
3- Simplification des tests
Ce que nous avons apprisCe que nous avons apprisCe que nous avons apprisCe que nous avons appris
ContexteContexteContexteContexte
• ProjetProjetProjetProjet ROVeRROVeRROVeRROVeR
(Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants)
• 2015201520152015----2016201620162016
• Majeur pour l’entrepriseMajeur pour l’entrepriseMajeur pour l’entrepriseMajeur pour l’entreprise
• Raisons :Raisons :Raisons :Raisons :
Désuétude
Se démarquer sur le marché
Dotation des tarificateurs difficile
• 2 équipes2 équipes2 équipes2 équipes
• Agilité : scepticismeAgilité : scepticismeAgilité : scepticismeAgilité : scepticisme
Contexte (Logiciel)Contexte (Logiciel)Contexte (Logiciel)Contexte (Logiciel)
• Application VB6 désuèteApplication VB6 désuèteApplication VB6 désuèteApplication VB6 désuète
Formulaires de saisie de données personnelles (identification,
antécédents de santé, etc.)
• Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée)
• Mode connecté et déconnectéMode connecté et déconnectéMode connecté et déconnectéMode connecté et déconnecté
• Saisie massiveSaisie massiveSaisie massiveSaisie massive
• Options :Options :Options :Options :
WPF, Winforms, Web embarqué
AvantAvantAvantAvant
AprèsAprèsAprèsAprès
Premier défi :Premier défi :Premier défi :Premier défi :
Modifications itérativesModifications itérativesModifications itérativesModifications itératives
WPF dans
VB6
WPF dans VB6WPF dans VB6WPF dans VB6WPF dans VB6
MVVM… hein?MVVM… hein?MVVM… hein?MVVM… hein?
Image : https://prismlibrary.github.io/docs/wpf/Implementing-MVVM.html
Itératif = découplageItératif = découplageItératif = découplageItératif = découplage
ViewModel1 ViewModel2
““““ La plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatique
peuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirection
supplémentairesupplémentairesupplémentairesupplémentaire ””””
David Wheeler
Itératif = découplageItératif = découplageItératif = découplageItératif = découplage
ViewModel1 ViewModel2
Itératif = découplageItératif = découplageItératif = découplageItératif = découplage
ViewModel ViewModelEvent Broker
Publish Subscribe
Exemples connus de pub/Exemples connus de pub/Exemples connus de pub/Exemples connus de pub/subsubsubsub
• Messages broker :Messages broker :Messages broker :Messages broker :
Queues (WebSphereMQ, JMS, RabbitMQ, ActiveMQ)
Kafka
Redis
Azure Service Bus, Amazon SNS
• Notifications mobilesNotifications mobilesNotifications mobilesNotifications mobiles
• EventsEventsEventsEvents (.NET),(.NET),(.NET),(.NET), EventEventEventEvent ListenersListenersListenersListeners (Java)(Java)(Java)(Java)
Itératif = découplageItératif = découplageItératif = découplageItératif = découplage
ViewModel ViewModelEvent Broker
Publish Subscribe
ServiceNavigation Log
Découplage
Deuxième défi :Deuxième défi :Deuxième défi :Deuxième défi :
Réutilisation du domaineRéutilisation du domaineRéutilisation du domaineRéutilisation du domaine
““““ Domain model : An object model of theDomain model : An object model of theDomain model : An object model of theDomain model : An object model of the
domain that incorporates both behavior anddomain that incorporates both behavior anddomain that incorporates both behavior anddomain that incorporates both behavior and
data.data.data.data. ””””
Martin Fowler
https://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.html
Réutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existant
Application VB6
Domaine
(Modèle objet, .NET)
Multiples responsabilités
Logique d’affaire
Persistance (XML)
Méga « graph » d’objets
Près de 1000 classes
Plus de 1000 enums
Réutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existant
Application VB6
Domaine
(Modèle objet, .NET)
Multiples responsabilités
Logique d’affaire
Persistance (XML)
Méga « graph » d’objets
Près de 1000 classes
Plus de 1000 enums
Application .NET
Réutiliser sans
modifier…
– Ça peut briser une autre
application!
– La structure objet est liée à la
persistence
– On avait des tests
automatisés, mais…
– Interface publique est
exposée COM
– Ah oui! On utilise un peu de
réflexion aussi…
– …
Image : https://blog.codinghorror.com/
BesoinsBesoinsBesoinsBesoins
• TestabilitéTestabilitéTestabilitéTestabilité
• Limiter les changements au modèle objetLimiter les changements au modèle objetLimiter les changements au modèle objetLimiter les changements au modèle objet
• Briser le cycle «Briser le cycle «Briser le cycle «Briser le cycle « développementdéveloppementdéveloppementdéveloppement refonterefonterefonterefonte »»»»
Clean Architecture
Robert C. Martin (Uncle Bob)
Infrastructure (REST,
Données, Log, etc.)
Présentation
(UI)
Couche service
application
Couche service
domaine
Domaine
Cœur de l’application
Architecture en
oignon
Jeffrey Palermo
Architecture en
oignon
Exemple
Présentation
(UI)
Infrastructure (REST, Données, Log,
etc.)
Couche service
application
Couche service
domaine
Domaine
TaskService
IBacklog
Program
TaskRepository
IEventPublisher
ITask
Repository
EventHub
ExempleExempleExempleExemple
Infrastructure (REST,
Données, Log, etc.)
Présentation
(UI)
Couche service
application
Couche service
domaine
Domaine
Cœur de l’application
Est-ce correct?
?
SacrilègeSacrilègeSacrilègeSacrilège !!!!
Où sont les DTO???Où sont les DTO???Où sont les DTO???Où sont les DTO???
Data Transfer ObjectData Transfer ObjectData Transfer ObjectData Transfer Object
https://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.html
Troisième défi :Troisième défi :Troisième défi :Troisième défi :
Simplifier les testsSimplifier les testsSimplifier les testsSimplifier les tests
Un test compliqué à coder = mauvais designUn test compliqué à coder = mauvais designUn test compliqué à coder = mauvais designUn test compliqué à coder = mauvais design
• Chaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbre
du domainedu domainedu domainedu domaine
• Pas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objet
• Navigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statique
““““ La plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatique
peuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirection
supplémentairesupplémentairesupplémentairesupplémentaire ””””
David Wheeler
Avertissement : À force d’ê
Patron «Patron «Patron «Patron « RepositoryRepositoryRepositoryRepository »»»»
• Centralise la logique d’accès aux donnéesCentralise la logique d’accès aux donnéesCentralise la logique d’accès aux donnéesCentralise la logique d’accès aux données
• Simplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objets
du domainedu domainedu domainedu domaine
• Pas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risque
ExempleExempleExempleExemple
Ce que nous avons apprisCe que nous avons apprisCe que nous avons apprisCe que nous avons appris
LeçonsLeçonsLeçonsLeçons
• Ne pas avoir peur d’oserNe pas avoir peur d’oserNe pas avoir peur d’oserNe pas avoir peur d’oser
• Certains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextes
• Tester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les tests
globalementglobalementglobalementglobalement
• ÉtaitÉtaitÉtaitÉtait----ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD?
• ScreamingScreamingScreamingScreaming architecturearchitecturearchitecturearchitecture
Découpage en composant
• La «La «La «La « Clean architectureClean architectureClean architectureClean architecture » est la seule façon de conserver» est la seule façon de conserver» est la seule façon de conserver» est la seule façon de conserver
notre logique d’affaire dans le tempsnotre logique d’affaire dans le tempsnotre logique d’affaire dans le tempsnotre logique d’affaire dans le temps
Faire du neuf avec du vieux, c’est une
approche responsable. Cessez
d’espérer. Renverser la vapeur
maintenant, une itération à la fois,
refactoring par refactoring…
RéférencesRéférencesRéférencesRéférences
• LivresLivresLivresLivres
Clean Architecture, Robert C. Martin
Working Effectively With Legacy Code, Michael Feathers
• Blogs et articlesBlogs et articlesBlogs et articlesBlogs et articles
https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/
http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-
architecture.html
• Code source exempleCode source exempleCode source exempleCode source exemple
https://github.com/karoldeland/CleanArchitectureLegacyCode
Merci!Merci!Merci!Merci!
Questions?Questions?Questions?Questions?
www.linkedin.com/in/karoldeland
@karoldeland
http://pragma3.com

Contenu connexe

Tendances

Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?
Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?
Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?Publicis Sapient Engineering
 
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?devops REX
 
Kanban, un outil simple de gestion de la production.
Kanban, un outil simple de gestion de la production.Kanban, un outil simple de gestion de la production.
Kanban, un outil simple de gestion de la production.Blackbird
 
Mes Outils Kanban, tout un programme !
Mes Outils Kanban, tout un programme !Mes Outils Kanban, tout un programme !
Mes Outils Kanban, tout un programme !Cédric Leblond
 
Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?antony_guilloteau
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionSylvain Leroy
 
Lean Kanban Une Inversion de Controle
Lean Kanban Une Inversion de ControleLean Kanban Une Inversion de Controle
Lean Kanban Une Inversion de ControleDimitri Baeli
 
Développement en méthode agile
Développement en méthode agileDéveloppement en méthode agile
Développement en méthode agilelaurent bristiel
 
How to fail at benchmarking?
How to fail at benchmarking?How to fail at benchmarking?
How to fail at benchmarking?Pierre Laporte
 
20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
20130523 04 - Grille d'évaluation - Gestion du patrimoine de test20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
20130523 04 - Grille d'évaluation - Gestion du patrimoine de testLeClubQualiteLogicielle
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyJean-Pierre Vincent
 
Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesSirine Barguaoui
 
Du cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - NormationDu cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - NormationRUDDER
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?CGI Québec Formation
 
Accélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringAccélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringLaurent PY
 
Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Laurent PY
 

Tendances (20)

TIAD : DevOps & continuous delivery dans le cloud
TIAD : DevOps & continuous delivery dans le cloudTIAD : DevOps & continuous delivery dans le cloud
TIAD : DevOps & continuous delivery dans le cloud
 
Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?
Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?
Scrum Day 2014 - Êtes-vous prêts pour le modèle Spotify ?
 
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?
devops REX 2018 - Comment la qualité reflète-t-elle nos organisations ?
 
Kanban, un outil simple de gestion de la production.
Kanban, un outil simple de gestion de la production.Kanban, un outil simple de gestion de la production.
Kanban, un outil simple de gestion de la production.
 
Mes Outils Kanban, tout un programme !
Mes Outils Kanban, tout un programme !Mes Outils Kanban, tout un programme !
Mes Outils Kanban, tout un programme !
 
Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?Devops, ça change quoi pour moi développeur ?
Devops, ça change quoi pour moi développeur ?
 
Cleancode / Tocea / Introduction
Cleancode / Tocea / IntroductionCleancode / Tocea / Introduction
Cleancode / Tocea / Introduction
 
Lean Kanban Une Inversion de Controle
Lean Kanban Une Inversion de ControleLean Kanban Une Inversion de Controle
Lean Kanban Une Inversion de Controle
 
Développement en méthode agile
Développement en méthode agileDéveloppement en méthode agile
Développement en méthode agile
 
How to fail at benchmarking?
How to fail at benchmarking?How to fail at benchmarking?
How to fail at benchmarking?
 
20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
20130523 04 - Grille d'évaluation - Gestion du patrimoine de test20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
20130523 04 - Grille d'évaluation - Gestion du patrimoine de test
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwiparty
 
Méthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiquesMéthodes agiles vs méthodes classiques
Méthodes agiles vs méthodes classiques
 
Dev opsday case study
Dev opsday   case studyDev opsday   case study
Dev opsday case study
 
Agile Methodologies
Agile MethodologiesAgile Methodologies
Agile Methodologies
 
Du cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - NormationDu cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - Normation
 
Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?Tester du legacy code, mission impossible ?
Tester du legacy code, mission impossible ?
 
Accélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoringAccélérer les tests d’acceptation avec un DSL et du refactoring
Accélérer les tests d’acceptation avec un DSL et du refactoring
 
Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)Développement d'un grand projet piloté par les tests (BDD)
Développement d'un grand projet piloté par les tests (BDD)
 
XebiCon'17 : Agile Smells - Julien Rossignol
XebiCon'17 : Agile Smells - Julien RossignolXebiCon'17 : Agile Smells - Julien Rossignol
XebiCon'17 : Agile Smells - Julien Rossignol
 

Similaire à Clean Architecture et Code patrimonial

La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéNicolas Deverge
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...Publicis Sapient Engineering
 
DMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natifDMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natifOlivier Destrebecq
 
Xebicon architectures microservices azure v1.0
Xebicon   architectures microservices azure v1.0Xebicon   architectures microservices azure v1.0
Xebicon architectures microservices azure v1.0Michel HUBERT
 
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"OCTO Technology
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...FactoVia
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIDjamel Zouaoui
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!CARA_Lyon
 
Cellenza microservices - tour d'horizon - v0.1
Cellenza   microservices - tour d'horizon - v0.1Cellenza   microservices - tour d'horizon - v0.1
Cellenza microservices - tour d'horizon - v0.1Radoine Douhou
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Arnaud Auroux
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...Publicis Sapient Engineering
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapresLaurent Tardif
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 

Similaire à Clean Architecture et Code patrimonial (20)

La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
 
Nouveaux apis
Nouveaux apisNouveaux apis
Nouveaux apis
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
XebiCon'16 : Architecture MicroServices avec Azure par Michel Hubert, CTO de ...
 
DMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natifDMCA #20: Migration Natif vers react natif
DMCA #20: Migration Natif vers react natif
 
Xebicon architectures microservices azure v1.0
Xebicon   architectures microservices azure v1.0Xebicon   architectures microservices azure v1.0
Xebicon architectures microservices azure v1.0
 
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
La Duck Conf 2018 : "Une infrastructure peut en cacher une autre !"
 
_JCVFr
_JCVFr_JCVFr
_JCVFr
 
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...Pres azure   paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
Pres azure paas tdf -rex-hager-vincent thavonekham-regional director-azug f...
 
USI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SIUSI 2009 - Du RIA pour SI
USI 2009 - Du RIA pour SI
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
HTML5... La révolution maintenant!
HTML5... La révolution maintenant!HTML5... La révolution maintenant!
HTML5... La révolution maintenant!
 
Cellenza microservices - tour d'horizon - v0.1
Cellenza   microservices - tour d'horizon - v0.1Cellenza   microservices - tour d'horizon - v0.1
Cellenza microservices - tour d'horizon - v0.1
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
XebiCon'16 : Xebia Labs : Les outils de déploiement sont morts avec les Conta...
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapres
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 

Plus de Agile Montréal

ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...
ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...
ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...Agile Montréal
 
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...Agile Montréal
 
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander Dur
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander DurATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander Dur
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander DurAgile Montréal
 
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...Agile Montréal
 
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...Agile Montréal
 
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...Agile Montréal
 
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...Agile Montréal
 
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...Agile Montréal
 
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...Agile Montréal
 
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...Agile Montréal
 
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...ATMTL23 - Le Developer Experience au service de la livraison en continu par A...
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...Agile Montréal
 
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...Agile Montréal
 
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi Roche
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi RocheATMTL23 - Atelier PNL pour ameliorer la communication par Remi Roche
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi RocheAgile Montréal
 
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...Agile Montréal
 
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline Tissier
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline  TissierATMTL23 - La collaboration intergénérationnelle au travail par Apolline  Tissier
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline TissierAgile Montréal
 
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl Métivier
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl MétivierATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl Métivier
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl MétivierAgile Montréal
 
ATMTL23 - Économie coopérative et agilité par Dominique Pothier
ATMTL23 - Économie coopérative et agilité par Dominique PothierATMTL23 - Économie coopérative et agilité par Dominique Pothier
ATMTL23 - Économie coopérative et agilité par Dominique PothierAgile Montréal
 
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...Agile Montréal
 
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...Agile Montréal
 
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...Agile Montréal
 

Plus de Agile Montréal (20)

ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...
ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...
ATMTL23 - L'agilité augmentée par ChatGPT: comment utiliser l'agent intellige...
 
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...
ATMTL23 - How to create and elevate top talent? A cohort-based learning metho...
 
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander Dur
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander DurATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander Dur
ATMTL23 - TANS: there always a next sprint by Tom Siebeneicher and Sander Dur
 
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
ATMTL23 - Dépasser les frontières : Réinterpréter les Principes ISTQB avec un...
 
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...
ATMTL23 - Comment mieux atteindre vos objectifs grâce à l'agilité comportemen...
 
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...
ATMTL23 - Le multivers Agile - Volume 2: Odyssée vers Agiletopia par Martin L...
 
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...
ATMTL23 - Créer une entreprise apprenante : Les principes de Peter Senge pour...
 
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...
ATMTL23 - De la Zone de Guerre à la Zone de Cœur : Un Voyage de Résilience, d...
 
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...
ATMTL23 - Réussir sa transformation agile c'est d’abord changer son état d'es...
 
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...
ATMTL23 - The Happiness Blueprint: Positivity Experiments for Powerful Teamwo...
 
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...ATMTL23 - Le Developer Experience au service de la livraison en continu par A...
ATMTL23 - Le Developer Experience au service de la livraison en continu par A...
 
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...
ATMTL23 - L'Arbre de vie - Une pratique narrative pour se réapproprier son pa...
 
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi Roche
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi RocheATMTL23 - Atelier PNL pour ameliorer la communication par Remi Roche
ATMTL23 - Atelier PNL pour ameliorer la communication par Remi Roche
 
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...
ATMTL23 - Remettre l'humain au coeur de l'agilité avec le Mind Mapping par Re...
 
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline Tissier
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline  TissierATMTL23 - La collaboration intergénérationnelle au travail par Apolline  Tissier
ATMTL23 - La collaboration intergénérationnelle au travail par Apolline Tissier
 
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl Métivier
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl MétivierATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl Métivier
ATMTL23 - L'odysée d'un PMO vers un VMO par Elyes Dekhili et Karl Métivier
 
ATMTL23 - Économie coopérative et agilité par Dominique Pothier
ATMTL23 - Économie coopérative et agilité par Dominique PothierATMTL23 - Économie coopérative et agilité par Dominique Pothier
ATMTL23 - Économie coopérative et agilité par Dominique Pothier
 
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...
ATMTL23 - Agnostic Agile, un mouvement en Agilité qui respecte les bases les ...
 
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...
ATMTL23 - Innovation Unleashed: Inspiring Agile Teams through Creative Thinki...
 
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...
ATMTL23 - « A community of Scientists » Saisir le pouvoir du Toyota Kata pour...
 

Clean Architecture et Code patrimonial

  • 1. Clean Architecture &Clean Architecture &Clean Architecture &Clean Architecture & Code patrimonialCode patrimonialCode patrimonialCode patrimonial Karol DelandKarol DelandKarol DelandKarol Deland
  • 2. PrésentationPrésentationPrésentationPrésentation ► Conseiller en architecture logicielle ► Passionné d’architecture (oui je parle de code même le midi…) ► Mon rôle est d’aider les équipes de développement à livrer de la qualité plus rapidement www.linkedin.com/in/karoldeland @karoldeland http://pragma3.com
  • 3. iAiAiAiA Groupe FinancierGroupe FinancierGroupe FinancierGroupe Financier Une approche humaine Adoption du Lean et de l’agilité depuis 2012 Plus de 1000 personnes en TI En route vers le DevOps, le cloud et l’agilité à l’échelle
  • 4. Pourquoi cette présentation?Pourquoi cette présentation?Pourquoi cette présentation?Pourquoi cette présentation?
  • 5. Pour faire cesser l’entropie de votre code patrimonial, vous aurez besoin de vos meilleurs développeurs !
  • 6. AgendaAgendaAgendaAgenda Contexte du projetContexte du projetContexte du projetContexte du projet Trois défis :Trois défis :Trois défis :Trois défis : 1- Modifications itératives 2- Réutilisation de code patrimonial 3- Simplification des tests Ce que nous avons apprisCe que nous avons apprisCe que nous avons apprisCe que nous avons appris
  • 7. ContexteContexteContexteContexte • ProjetProjetProjetProjet ROVeRROVeRROVeRROVeR (Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants)(Refonte des Outils de Vente des Représentants) • 2015201520152015----2016201620162016 • Majeur pour l’entrepriseMajeur pour l’entrepriseMajeur pour l’entrepriseMajeur pour l’entreprise • Raisons :Raisons :Raisons :Raisons : Désuétude Se démarquer sur le marché Dotation des tarificateurs difficile • 2 équipes2 équipes2 équipes2 équipes • Agilité : scepticismeAgilité : scepticismeAgilité : scepticismeAgilité : scepticisme
  • 8. Contexte (Logiciel)Contexte (Logiciel)Contexte (Logiciel)Contexte (Logiciel) • Application VB6 désuèteApplication VB6 désuèteApplication VB6 désuèteApplication VB6 désuète Formulaires de saisie de données personnelles (identification, antécédents de santé, etc.) • Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée)Réutilisation d’une partie de l’ancienne application (Limite de la portée) • Mode connecté et déconnectéMode connecté et déconnectéMode connecté et déconnectéMode connecté et déconnecté • Saisie massiveSaisie massiveSaisie massiveSaisie massive • Options :Options :Options :Options : WPF, Winforms, Web embarqué
  • 11. Premier défi :Premier défi :Premier défi :Premier défi : Modifications itérativesModifications itérativesModifications itérativesModifications itératives
  • 13. WPF dans VB6WPF dans VB6WPF dans VB6WPF dans VB6
  • 14. MVVM… hein?MVVM… hein?MVVM… hein?MVVM… hein? Image : https://prismlibrary.github.io/docs/wpf/Implementing-MVVM.html
  • 15. Itératif = découplageItératif = découplageItératif = découplageItératif = découplage ViewModel1 ViewModel2
  • 16. ““““ La plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatique peuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirection supplémentairesupplémentairesupplémentairesupplémentaire ”””” David Wheeler
  • 17. Itératif = découplageItératif = découplageItératif = découplageItératif = découplage ViewModel1 ViewModel2
  • 18. Itératif = découplageItératif = découplageItératif = découplageItératif = découplage ViewModel ViewModelEvent Broker Publish Subscribe
  • 19. Exemples connus de pub/Exemples connus de pub/Exemples connus de pub/Exemples connus de pub/subsubsubsub • Messages broker :Messages broker :Messages broker :Messages broker : Queues (WebSphereMQ, JMS, RabbitMQ, ActiveMQ) Kafka Redis Azure Service Bus, Amazon SNS • Notifications mobilesNotifications mobilesNotifications mobilesNotifications mobiles • EventsEventsEventsEvents (.NET),(.NET),(.NET),(.NET), EventEventEventEvent ListenersListenersListenersListeners (Java)(Java)(Java)(Java)
  • 20. Itératif = découplageItératif = découplageItératif = découplageItératif = découplage ViewModel ViewModelEvent Broker Publish Subscribe ServiceNavigation Log
  • 22. Deuxième défi :Deuxième défi :Deuxième défi :Deuxième défi : Réutilisation du domaineRéutilisation du domaineRéutilisation du domaineRéutilisation du domaine
  • 23. ““““ Domain model : An object model of theDomain model : An object model of theDomain model : An object model of theDomain model : An object model of the domain that incorporates both behavior anddomain that incorporates both behavior anddomain that incorporates both behavior anddomain that incorporates both behavior and data.data.data.data. ”””” Martin Fowler https://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.htmlhttps://martinfowler.com/eaaCatalog/domainModel.html
  • 24. Réutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existant Application VB6 Domaine (Modèle objet, .NET) Multiples responsabilités Logique d’affaire Persistance (XML) Méga « graph » d’objets Près de 1000 classes Plus de 1000 enums
  • 25. Réutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existantRéutilisation de l’existant Application VB6 Domaine (Modèle objet, .NET) Multiples responsabilités Logique d’affaire Persistance (XML) Méga « graph » d’objets Près de 1000 classes Plus de 1000 enums Application .NET
  • 26. Réutiliser sans modifier… – Ça peut briser une autre application! – La structure objet est liée à la persistence – On avait des tests automatisés, mais… – Interface publique est exposée COM – Ah oui! On utilise un peu de réflexion aussi… – … Image : https://blog.codinghorror.com/
  • 27. BesoinsBesoinsBesoinsBesoins • TestabilitéTestabilitéTestabilitéTestabilité • Limiter les changements au modèle objetLimiter les changements au modèle objetLimiter les changements au modèle objetLimiter les changements au modèle objet • Briser le cycle «Briser le cycle «Briser le cycle «Briser le cycle « développementdéveloppementdéveloppementdéveloppement refonterefonterefonterefonte »»»»
  • 28. Clean Architecture Robert C. Martin (Uncle Bob)
  • 29. Infrastructure (REST, Données, Log, etc.) Présentation (UI) Couche service application Couche service domaine Domaine Cœur de l’application Architecture en oignon Jeffrey Palermo
  • 30. Architecture en oignon Exemple Présentation (UI) Infrastructure (REST, Données, Log, etc.) Couche service application Couche service domaine Domaine TaskService IBacklog Program TaskRepository IEventPublisher ITask Repository EventHub
  • 32. Infrastructure (REST, Données, Log, etc.) Présentation (UI) Couche service application Couche service domaine Domaine Cœur de l’application Est-ce correct? ?
  • 33. SacrilègeSacrilègeSacrilègeSacrilège !!!! Où sont les DTO???Où sont les DTO???Où sont les DTO???Où sont les DTO??? Data Transfer ObjectData Transfer ObjectData Transfer ObjectData Transfer Object https://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.htmlhttps://martinfowler.com/bliki/LocalDTO.html
  • 34. Troisième défi :Troisième défi :Troisième défi :Troisième défi : Simplifier les testsSimplifier les testsSimplifier les testsSimplifier les tests
  • 35. Un test compliqué à coder = mauvais designUn test compliqué à coder = mauvais designUn test compliqué à coder = mauvais designUn test compliqué à coder = mauvais design • Chaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbreChaque service applicatif dépendait de la racine de l’arbre du domainedu domainedu domainedu domaine • Pas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objetPas de requêtes dynamiques sur le modèle objet • Navigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statiqueNavigation entre les entités par un mécanisme statique
  • 36. ““““ La plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatiqueLa plupart des problèmes en informatique peuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirectionpeuvent se résoudre avec un niveau d’indirection supplémentairesupplémentairesupplémentairesupplémentaire ”””” David Wheeler Avertissement : À force d’ê
  • 37. Patron «Patron «Patron «Patron « RepositoryRepositoryRepositoryRepository »»»» • Centralise la logique d’accès aux donnéesCentralise la logique d’accès aux donnéesCentralise la logique d’accès aux donnéesCentralise la logique d’accès aux données • Simplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objetsSimplifie les dépendances entre services applicatifs et objets du domainedu domainedu domainedu domaine • Pas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risquePas facile à tester, mais diminue le risque
  • 39. Ce que nous avons apprisCe que nous avons apprisCe que nous avons apprisCe que nous avons appris
  • 40. LeçonsLeçonsLeçonsLeçons • Ne pas avoir peur d’oserNe pas avoir peur d’oserNe pas avoir peur d’oserNe pas avoir peur d’oser • Certains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextesCertains patrons peuvent être utiles dans d’autres contextes • Tester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les testsTester après coup n’encourage pas la réflexion sur les tests globalementglobalementglobalementglobalement • ÉtaitÉtaitÉtaitÉtait----ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD?ce un domaine riche ou du CRUD? • ScreamingScreamingScreamingScreaming architecturearchitecturearchitecturearchitecture Découpage en composant • La «La «La «La « Clean architectureClean architectureClean architectureClean architecture » est la seule façon de conserver» est la seule façon de conserver» est la seule façon de conserver» est la seule façon de conserver notre logique d’affaire dans le tempsnotre logique d’affaire dans le tempsnotre logique d’affaire dans le tempsnotre logique d’affaire dans le temps
  • 41. Faire du neuf avec du vieux, c’est une approche responsable. Cessez d’espérer. Renverser la vapeur maintenant, une itération à la fois, refactoring par refactoring…
  • 42. RéférencesRéférencesRéférencesRéférences • LivresLivresLivresLivres Clean Architecture, Robert C. Martin Working Effectively With Legacy Code, Michael Feathers • Blogs et articlesBlogs et articlesBlogs et articlesBlogs et articles https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/ http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean- architecture.html • Code source exempleCode source exempleCode source exempleCode source exemple https://github.com/karoldeland/CleanArchitectureLegacyCode