Il n’y a pas de “bon”    Modèle Métier      Grégory Weinbach        @gweinbach       http://mdblog.fr                     ...
En quelques mots…                    2
Grégory Weinbach                            http://mdblog.fr - @gweinbach                     hanoi(X) :-                 ...
4
Il faut concevoir pour l’utilisateur                                       5
Il faut concevoir avec l’utilisateur                                       6
7
Modéliser le Métier de    l’utilisateur                         8
Présentation Services  Entités Données               9
10
Réponse :Une Entité doit représenter un Concept du métier                              11
Tuyau                  Ev acuation                                         1       Siphon                    1  Ev ier    ...
13
14
Liv retitreauteuréditeur              15
16
17
18
19
20
21
22
Liv retitreauteuréditeurISBNcopyrightnombre de pageshauteurlargeurépaisseur/volumeillustration couverturetexte quatrième d...
24
Pas un mais des « Livres »Pas un mais des Modèles                             25
Un Modèle Métier = Un Contexte        = Un Domaine                                 26
Choisissons un Contexte : La Vente aux Librairies                            27
Coordonnées                                                                  Client                                       ...
Coordonnées                                                                  Client                                       ...
JoinCommuneToCode                                                                          Commune étrangère              ...
Pourquoi ?             31
« ceci n’est pas un livre »                              32
33
Contact Librairie                   -       nom                   -       tél                   -       e-mail            ...
Présentation Services  Entités Données               35
Présentation Services  Entités Données               36
Réponse :Une Entité n’existe que si au moins     un Service la manipuleUn Service n’existe que si au moinsune IHM (ou un C...
« Ubiquitous Language » ?                            38
39
In Dictionnaire Philosophique - Didier-Pierre Chicaneau de Neuville (1762)(merci à Christophe Thiry http://urba-si.blogspo...
Merci        41
Prochain SlideShare
Chargement dans…5
×

Devoxx 2012 - Grégory Weinbach - Il n y a pas de bon modèle métier - v5 - fr - 1280x720

1 445 vues

Publié le

Attention ! Cette présentation ne peut être comprise sans le commentaire associ (certains slides peuvent être trompeur 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.

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

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Devoxx 2012 - Grégory Weinbach - Il n y a pas de bon modèle métier - v5 - fr - 1280x720

  1. 1. Il n’y a pas de “bon” Modèle Métier Grégory Weinbach @gweinbach http://mdblog.fr 1
  2. 2. En quelques mots… 2
  3. 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. 4
  5. 5. Il faut concevoir pour l’utilisateur 5
  6. 6. Il faut concevoir avec l’utilisateur 6
  7. 7. 7
  8. 8. Modéliser le Métier de l’utilisateur 8
  9. 9. Présentation Services Entités Données 9
  10. 10. 10
  11. 11. Réponse :Une Entité doit représenter un Concept du métier 11
  12. 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. 13
  14. 14. 14
  15. 15. Liv retitreauteuréditeur 15
  16. 16. 16
  17. 17. 17
  18. 18. 18
  19. 19. 19
  20. 20. 20
  21. 21. 21
  22. 22. 22
  23. 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. 24
  25. 25. Pas un mais des « Livres »Pas un mais des Modèles 25
  26. 26. Un Modèle Métier = Un Contexte = Un Domaine 26
  27. 27. Choisissons un Contexte : La Vente aux Librairies 27
  28. 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. 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. 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. 31. Pourquoi ? 31
  32. 32. « ceci n’est pas un livre » 32
  33. 33. 33
  34. 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. 35. Présentation Services Entités Données 35
  36. 36. Présentation Services Entités Données 36
  37. 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. 38. « Ubiquitous Language » ? 38
  39. 39. 39
  40. 40. In Dictionnaire Philosophique - Didier-Pierre Chicaneau de Neuville (1762)(merci à Christophe Thiry http://urba-si.blogspot.com) 40
  41. 41. Merci 41

×