3. Domain Driven Design
●
Orienté sur le domaine
●
Ubuquitus Language
●
Entity = Identité + Etat + Comportement
●
Value Object = Immutable
4. Domain Driven Design :
Architecture en Oignon
Service
Domain
Test
e
ur
ct
ru
st
fra
In
Web
5. Domain Driven Design
Exemple : Projet eBiblio
●
User Stories :
–
●
En tant qu'adhérent, je veux louer un livre.
Identification des concepts
–
–
Adhérent, nom, prenom, numéroAdherent
Livre, auteur, titre, référence,etat
7. Domain Driven Design
Exemple : ValueObject
// Le NoAdherent doit être du format [0-9]{3}
public class NoAdherent implements ValueObject {
private String numero;
public NoAdherent(String numero) {
if (new RegleValidationNoAdherent(numero).valider()) {
this.numero = numero;
}
}
}
9. Comment rendre mes spécifications
exécutables ?
Behavior Driven Developement
●
TDD Orienté sur le comportement
●
Utilise le DDD
●
Basé sur le principe du Given, When Then
10. BDD avec JBehave
Story :
Louer_un_livre.story
Story launcher :
eBiblioStoryEmbedder.java
Step :
GererLivreSteps.java
11. BDD :
Projet eBiblio
●
User Story :
–
●
En tant qu'adhérent, je veux louer un livre
Louer_un_livre.story
–
–
–
–
–
Etant donné que l'adhérent 123 existe.
Etant donné que le livre aaa est disponible.
Quand l'adhérent 123 loue le livre aaa
Alors le livre est en état LOUE.
Alors l'adhérent à loué 1 livre.
12. public class GererLivreSteps {
BDD et JBehave
Projet eBiblio
@Given("mon adhérent %noAdherent existe.")
@Pending
public void givenMonAdherentExiste(String noAdherent) {
}
@Given("mon livre référence %reference est disponible.")
@Pending
public void givenMonLivreReferenceEstDisponible(String reference) {
}
@When("l'adhérent loue le livre.")
@Pending
public void whenLadherentLoueLeLivre() {
}
@Then("le livre est loué.")
public void thenLeLivreEstLoue() {
}
}
@Then("l'adhérent a loué %nombre livre.")
public void thenLadherentALoueLivres(int nombre) {
}
13. DDD et BDD
Retour d'expérience
●
Les plus
●
●
Prise de conscience du métier de la complexité
●
Rapproche les devs du métiers
●
Test d'acceptance (test fonctionnels)
●
Robustesse vis à vis du changement
●
●
Facilité de mise en œuvre d'un métier complexe
Facilité du code à prendre en main
Les moins
●
Change la manière de coder (finit le CRUD)
●
Besoin de bons développeurs
●
On peut lâcher facilement
●
Besoin d'une organisation « Agile »