• Save
Devoxx 2012   Gregory Weinbach - il n y a pas de bon modele metier
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Devoxx 2012 Gregory Weinbach - il n y a pas de bon modele metier

  • 1,688 views
Uploaded on

Présentation de Gregory Weinbach au Devoxx France 2012 : il n'y a pas de bon modèle métier ...

Présentation de Gregory Weinbach au Devoxx France 2012 : il n'y a pas de bon modèle métier

Attention ! Cette présentation ne peut être comprise sans le commentaire associé (certains slides peuvent être trompeurs quant au message délivré).
Pitch : "On vous le répète : une application répond bien aux besoins de ses utilisateurs si elle reflète bien leur métier. Les approches du développement orientées Utilisateur sont d'ailleurs faites pour ça : le DDD d'Eric Evans comme le BDD de Dan North concentrent leurs efforts sur la modélisation du "Coeur du Domaine". En pratique, comment faire un "bon" Modèle Métier ? Traditionnellement, on dit qu'il faut représenter au mieux la réalité de ce métier : faire "coller" le code au plus près du monde réel pour garantir l'adéquation au besoin. Malheureusement, cette approche naïve est mauvaise ! Pourquoi ? Parce qu'un logiciel ne représente pas le monde réel, il informatise des services rendus. Parce qu'un Modèle de Domaine n'est pas un Modèle du Métier, c'est un modèle de conception répondant à des exigences de codage. Et je vous montrerai, à partir d'exemples, pourquoi il ne doit pas être construit en observant le monde réel mais à partir des besoins de présentation ou de services."

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,688
On Slideshare
1,688
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Il n’y a pas de “bon” Modèle Métier Grégory Weinbach @gweinbach http://mdblog.fr 1
  • 2. En quelques mots… 2
  • 3. Grégory Weinbach http://mdblog.fr - @gweinbach hanoi(X) :- move(X,left,right,center). move(1,X,Y,_) :- write(Move top disk from ), write(X), write( to ), write(Y), nl. move(N,X,Y,Z) :-#include "stdio.h" M is N-1, move(M,X,Z,Y), move(1,X,Y,_), move(M,Z,Y,X). 3
  • 4. 4
  • 5. Il faut concevoir pour l’utilisateur 5
  • 6. Il faut concevoir avec l’utilisateur 6
  • 7. 7
  • 8. Modéliser le Métier de l’utilisateur 8
  • 9. Présentation Services Entités Données 9
  • 10. 10
  • 11. Réponse :Une Entité doit représenter un Concept du métier 11
  • 12. Tuyau Ev acuation 1 Siphon 1 Ev ier 1..* Tuyau PVC 1 Raccordement Tuyau de cuiv re 1..* Arrivée deauArriv ée deau Arriv ée deau chaude froide 1 1 12
  • 13. 13
  • 14. 14
  • 15. Liv retitreauteuréditeur 15
  • 16. 16
  • 17. 17
  • 18. 18
  • 19. 19
  • 20. 20
  • 21. 21
  • 22. 22
  • 23. Liv retitreauteuréditeurISBNcopyrightnombre de pageshauteurlargeurépaisseur/volumeillustration couverturetexte quatrième de couverturestockdate de disponibilitédate de réimpressiondépôt légaltype de papiertype de reliuretexte bruttexte mis en formecollectiontome numéroallée numéropositionphoto de lauteurprésentation de lauteuropérations spécialesprix de vente publicnote des lecteursnote des critiquesautres choix des lecteurs 23
  • 24. 24
  • 25. Pas un mais des « Livres »Pas un mais des Modèles 25
  • 26. Un Modèle Métier = Un Contexte = Un Domaine 26
  • 27. Choisissons un Contexte : La Vente aux Librairies 27
  • 28. Coordonnées Client 0..* Coordonnées de contact Entreprise Personne parle Pays Langue - type - nom commercial - civilité 0..* 0..* - code ISO - téléphone [0..1] - dénomination sociale - nom - nom - libellé - téléphone mobile [0..1] - n° TVA [0..1] - prénom - fax [0..1] - e-mail [0..1] 1 Forme j uridique Adresse postale Entreprise Entreprise - code étrangère française 0..1 - libellé - numéro SIREN 1 - n° TVA 1 Activ ité NAF 0..1 1 - code NAF Code postal - libellé- code Commune 0..1 - nom 1..* 1..* Adresse Entreprise Adresse personne 0..1 - identité du destinataire et/ou service [0..1] - n° - Etape - Couloir - Escalier [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] - numéro et libellé de la voie - numéro et libellé de la voie - mention spéciale - Commune géo. [0..1] - sce particulier de distrib. - lieu dit [0..1] Commune Commune française étrangère - code INSEE 28
  • 29. Coordonnées Client 0..* Coordonnées de contact Entreprise Personne parle Pays Langue - type - nom commercial - civilité 0..* 0..* - code ISO - téléphone [0..1] - dénomination sociale - nom - nom - libellé - téléphone mobile [0..1] - n° TVA [0..1] - prénom - fax [0..1] - e-mail [0..1] 1 Forme j uridique Adresse postale Entreprise Entreprise - code étrangère française 0..1 - libellé - numéro SIREN 1 - n° TVA 1 Activ ité NAF 0..1 1 - code NAF Code postal - libellé- code Commune 0..1 - nom 1..* 1..* Adresse Entreprise Adresse personne 0..1 - identité du destinataire et/ou service [0..1] - n° - Etape - Couloir - Escalier [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] - numéro et libellé de la voie - numéro et libellé de la voie - mention spéciale - Commune géo. [0..1] - sce particulier de distrib. - lieu dit [0..1] Commune Commune française étrangère - code INSEE 29
  • 30. JoinCommuneToCode Commune étrangère postal appartient à Client «column» «column» «column» *pfK commune étrangèreID :Integer «column» FK code postalID :Integer FK communeID :Integer *PK clientID :Integer FK communeID :Integer +PK_Client «PK» «FK» + PK_Commune étrangère(Integer) «PK» 1 «FK» + Commune(Integer) «FK» + PK_Client(Integer) + Code postal(Integer) +Commune + FK_Commune étrangère_Commune(Integer) + Commune(Integer) +Commune 0..* +PK_Client +PK_Client 1 1..* (clientID = clientID) +Code postal 1..* +FK_Commune étrangère_Commune (communeID = communeID) 0..1 «FK» (code postalID = code postalID) = communeID) (communeID (commune étrangèreID = communeID) +FK_Coordonnées_Client 0..* «FK» «FK» «FK» «FK» +PK_Code postal +PK_Commune +PK_Commune +PK_Commune 1 Coordonnées Pays Code postal Commune «column» *PK coordonnéesID :Integer «column» code ISO «column» «column» FK clientID :Integer code nom libellé *PK code postalID :Integer *PK communeID :Integer *PK paysID :Integer +PK_Commune «PK» + PK_Coordonnées(Integer) +PK_Coordonnées +PK_Code postal «PK» «PK» 1 «PK» «FK» 1 + PK_Pays(Integer) + PK_Code postal(Integer) + PK_Commune(Integer) 1 + FK_Coordonnées_Client(Integer) +PK_Pays 1 +PK_Commune françaiseID = communeID) (commune 1 +PK_Coordonnées 1 (paysID = paysID) (coordonnées de contactID = coordonnéesID) (code postalID = code postalID) = communeID) (communeID «FK» +FK_Commune française_Commune 0..1 (adresse postaleID = coordonnéesID) «FK» «FK» +FK_Adresse postale_Pays «FK» «FK» +FK_Coordonnées de contact_Coordonnées 0..1 «FK» Commune française Adresse postale Coordonnées de contact +FK_Adresse postale_Code postal «column» Coordonnées Client «column» +FK_Adresse postale_Coordonnées «column» +FK_Adresse postale_Commune code INSEE 0..* *pfK adresse postaleID :Integer *pfK commune françaiseID :Integer type téléphone [0..1] 0..1 FK code postalID :Integer 1 *FK communeID :Integer téléphone mobile [0..1] FK paysID :Integer «PK» fax [0..1] + PK_Commune française(Integer) e-mail [0..1] «FK» *pfK coordonnées de contactID :Integer «PK» + FK_Commune française_Commune(Integer) + PK_Adresse postale(Integer) «PK» «FK» +PK_Commune française Coordonnées de contact Entreprise Personne + PK_Coordonnées de contact(Integer) + FK_Adresse postale_Coordonnées(Integer) Pays parle Langue + FK_Adresse postale_Code postal(Integer) «FK» (personne physiqueID = clientID) - type - nom commercial - civilité 0..* 0..* + FK_Coordonnées de contact_Coordonnées(Integer) «FK» + FK_Adresse postale_Commune(Integer) (commune françaiseID = commune françaiseID) - code ISO - téléphone [0..1] - dénomination sociale - nom - nom + FK_Adresse postale_Pays(Integer) - libellé «FK» - téléphone mobile [0..1] - n° TVA [0..1] - prénom (personne moraleID = clientID) - fax [0..1] (adresse+PK_Adresse postale = adresse(adresse personne moraleID = adresse postaleID) personne physiqueID 1 +PK_Adresse postale postaleID) 1 - e-mail [0..1] «FK» «FK» +FK_Adresse personne physique_Adresse postale 0..1 «FK» +FK_Adresse personne morale_Adresse postale 0..1 +Commune française 1..* 1 Adresse personne physique Adresse personne morale appartient à «column» «column» «column» Forme j uridique n° - Etape - Couloir - Escalier [0..1] identité du destinataire et/ou service [0..1] FK commune françaiseID :Integer Adresse postale Entreprise Entreprise entrée - Bât. - Immeuble - Résid. [0..1] entrée - Bât. - Immeuble - Résid. [0..1] - code numéro et libellé de la voie numéro et libellé de la voie étrangère française «FK» 0..1 - libellé sce particulier de distrib. - lieu dit [0..1] mention spéciale - Commune géo. [0..1] + Commune française(Integer) - numéro SIREN *pfK adresse personne physiqueID :Integer *pfK adresse personne moraleID :Integer 1 - n° TVA «PK» «PK» 1 Activ ité NAF + PK_Adresse personne physique(Integer) + PK_Adresse personne morale(Integer) 0..1 «FK» «FK» 1 - code NAF + FK_Adresse personne physique_Adresse postale(Integer) + FK_Adresse personne morale_Adresse postale(Integer) Code postal - libellé- code Commune +PK_Adresse personne physique 0..1 +PK_Adresse personne morale 0..1 0..1 +FK_Personne physique_Client personne physiqueID = adresse personne physiqueID) (adresse (adresse personne moraleID = adresse personne moraleID) - nom «FK» «FK» 1..* +FK_Personne physique_Adresse personne physique 0..1 +FK_Personne morale_Adresse personne morale morale_Client 0..1 +FK_Personne 1..* Adresse Entreprise Adresse personne 0..1 Personne physique Personne morale - identité du destinataire et/ou service [0..1] - n° - Etape - Couloir - Escalier [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] - entrée - Bât. - Immeuble - Résid. [0..1] «column» «column» - numéro et libellé de la voie - numéro et libellé de la voie Activ ité NAF Forme j uridique civilité Langue nom commercial - mention spéciale - Commune géo. [0..1] - sce particulier de distrib. - lieu dit [0..1] nom dénomination sociale prénom n° TVA [0..1] «column» «column» «column» Commune Commune *pfK personne physiqueID :Integer *pfK personne moraleID :Integer code NAF code nom libellé libellé française étrangère FK adresse personne physiqueID :Integer *PK langueID :Integer FK adresse personne moraleID :Integer *PK activité NAFID :Integer *PK forme juridiqueID :Integer - code INSEE «PK» «PK» «PK» + PK_Personne physique(Integer) + PK_Personne morale(Integer) «PK» «PK» + PK_Langue(Integer) + PK_Activité NAF(Integer) + PK_Forme juridique(Integer) «FK» +PK_Langue «FK» + FK_Personne physique_Adresse personne physique(Integer) + FK_Personne morale_Adresse personne morale(Integer) +PK_Activité NAF 0..1 +PK_Forme juridique 0..1 + FK_Personne physique_Client(Integer) + FK_Personne morale_Client(Integer) (activité NAFID = activité NAFID) (forme juridiqueID = forme juridiqueID) +PK_Personne physique (langueID = langueID) +PK_Personne morale1 +PK_Personne morale françaiseID = personne moraleID)«FK» (personne morale 1 «FK» (personne physiqueID = personne physiqueID) «FK» (personne morale étrangèreID = morale française_Personne«FK» française_Activité NAF +FK_Personne personne moraleID) +FK_Personne+FK_Personne morale française_Forme juridique morale 0..1 morale «FK» «FK» Personne morale française +Personne physique 0..* +Langue 0..* +FK_Personne morale étrangère_Personne morale 0..1 «column» parle Personne morale étrangère numéro SIREN n° TVA «column» «column» *pfK personne morale françaiseID :Integer FK langueID :Integer *pfK personne morale étrangèreID :Integer FK activité NAFID :Integer FK personne physiqueID :Integer FK forme juridiqueID :Integer «PK» «FK» + PK_Personne morale étrangère(Integer) «PK» + Langue(Integer) «FK» + PK_Personne morale française(Integer) + Personne physique(Integer) + FK_Personne morale étrangère_Personne morale(Integer) «FK» + FK_Personne morale française_Activité NAF(Integer) + FK_Personne morale française_Forme juridique(Integer) + FK_Personne morale française_Personne morale(Integer) 30
  • 31. Pourquoi ? 31
  • 32. « ceci n’est pas un livre » 32
  • 33. 33
  • 34. Contact Librairie - nom - tél - e-mail Commande + fac turer() 0..1 1 Destinataire Facture- nom - c lient- adresse 1 - adresse 1- adresse 2 - adresse 2- c ode postal - c ode postal- ville - ville- pays - n° TVA - montant HT + c alc uler MontantTTC() 34
  • 35. Présentation Services Entités Données 35
  • 36. Présentation Services Entités Données 36
  • 37. Réponse :Une Entité n’existe que si au moins un Service la manipuleUn Service n’existe que si au moinsune IHM (ou un Client) en a besoin 37
  • 38. « Ubiquitous Language » ? 38
  • 39. 39
  • 40. In Dictionnaire Philosophique - Didier-Pierre Chicaneau de Neuville (1762)(merci à Christophe Thiry http://urba-si.blogspot.com) 40
  • 41. Merci 41