Upload
francois-wauquier
View
619
Download
1
Embed Size (px)
Citation preview
Domain Driven Design
François Wauquier
Agile Tour Lille 2009 - Sfeir
Il est difficile de capturer le besoin présent
Il est impossible de capturer le besoin futur
Les méthodes agile exploitent le changement comme avantage compétitif
en livrant fréquemment
Manifeste Agile
Les individus et les interactions plutôt que les processus et les outils
Un logiciel qui fonctionne plutôt que une documentation détaillée
La collaboration avec le client plutôt que la négociation de contrats
Accepter le changement plutôt que suivre le plan
Accepter le changement
Accueillir l'évolution des besoins, même tard dans le développement
Les gens de l'art et les développeurs doivent travailler ensemble quotidiennement tout au long du projet
Design (Conception)
‘Big Design Up Front’ ≠ Conception Emergeante
Processus incrémental?
Domain Driven Design
Eric Evans
‘Tackling Complexity in the Heart of Software’
‘Model Driven Design’
‘Ubiquitus Language’
‘Supple Design’
Ubiquitous Language
Langage commun
Monsieur le client, Est-ce que ‘A’ veut dire la même chose que ‘B’ ?
‘Domain Specific Language’
Test Driven Development
Test avant implémentation
Toujours
‘Intention Revealing Interfaces’
‘Side-Effect-Free Functions’
Contrat de méthode
Refactoring
Améliorer la lisibilité et/ou la maintenabilité du code
Toujours
Rendre visible les concepts cachés
Test Driven Requirement
Spécifications exécutables
Une story est définie par son parcours utilisateur et ses tests d’ acceptance client
Le test d’ acceptance est écrit par le client pendant l’itération
Intégration continue
Tests de code (TDD)
Tests fonctionnels (TDR)
Programmation en couches
Presentation
Services
Domain
Infrastrucure
Mais programmation par story!
Domain
Entities
Value Objects
Factories
Repositories
Pair Programming
PiloteCoPilote
Partage de connaissancesFormationNommage de classes, méthodesSuppression erreurs de typo, syntaxe, inattention
On demande au client ?On fait un workshop ?
Workshop
Equipe et clientSalle toujours dispoIntenseOrienté solution
UML‘Paper Prototyping’Métaphore
Organisation d’équipes
‘Shared Kernel’
‘Customers /Supplier Teams’
‘Conformist’
‘Anticorruption Layer’
‘Separate Ways’
En couches ou objet?
class FooServiceImpl implements FooService { FooDao fooDao; void bar(Foo foo){ foo.bar(); fooDao.saveOrUpdate(foo); } void setFooDao(FooDao fooDao){ this.fooDao = fooDao; }}
Merci
François Wauquier
Sfeir on agile way
Agile France
http://francois.wauquier.fr