<?xml version="1.0" encoding="UTF-8"?><rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Commentaires sur : DDD &#8211; La conception qui lie le fonctionnel et le code</title> <atom:link href="http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Fri, 10 Feb 2012 09:50:25 +0000</lastBuildDate> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>Par : Guillaume</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-15963</link> <dc:creator>Guillaume</dc:creator> <pubDate>Sun, 18 Oct 2009 21:38:34 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-15963</guid> <description>Très bon article, qui résume bien l&#039;esprit de DDD. Pour ceux qui souhaitent approfondir le sujet, une version française de DDD Quickly (paru sur InfoQ à l&#039;origine) vient de voir le jour : http://blog.infosaurus.fr/post/2009/10/13/DDD-Vite-Fait%2C-les-fondamentaux-de-DDD</description> <content:encoded><![CDATA[<p>Très bon article, qui résume bien l&#8217;esprit de DDD. Pour ceux qui souhaitent approfondir le sujet, une version française de DDD Quickly (paru sur InfoQ à l&#8217;origine) vient de voir le jour : <a
href="http://blog.infosaurus.fr/post/2009/10/13/DDD-Vite-Fait%2C-les-fondamentaux-de-DDD" rel="nofollow">http://blog.infosaurus.fr/post/2009/10/13/DDD-Vite-Fait%2C-les-fondamentaux-de-DDD</a></p> ]]></content:encoded> </item> <item><title>Par : louis gueye</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10349</link> <dc:creator>louis gueye</dc:creator> <pubDate>Fri, 06 Feb 2009 16:15:12 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10349</guid> <description>Félicitations à l&#039;auteur de l&#039;article.
Expliquer ce qu&#039;est un design orienté domain model n&#039;est pas aisé du tout.
C&#039;est plus de l&#039;ordre du bon sens c&#039;est pour cela que ce n&#039;est pas simple à formaliser.
Tant que l&#039;on ne perd pas de vue que son but est la capture du fonctionnel par différentes pratiques de coding, on est bon.
En capturant la totalité du fonctionnel dans le code on réalise le programme &#039;parfait&#039; du point de vue d&#039;un développeur car ça apporte une valeur inestimable en terme de compréhension, donc de reprise de code à des fins de refactoring (un code est amené à bouger car il reflète le changement du business et le niveau de compréhension du business à un instant T).
Comme la perfection n&#039;existe pas il existe des pratiques qui vont nous permettre de l&#039;approcher.
L&#039;exercice consiste à se poser ces questions de façon récurrente :
- mon domain model reflète-t-il assez le fonctionnel ?
- mon domain model est-il indépendant de ma stratégie de persistance ? (ma stratégie de persistance peut changer : SGBD, mémoire vive; les requis fonctionnels doivent subsister)
- mon domain model est-il portable dans un autre langage objet ? (java, c++, c# ; les requis fonctionnels doivent subsister)
- mon domain model reflète-t-il les cas d&#039;utilisation de facon exhaustive ? (La façade de mon application fait partie de mon domain model et doit comporter toutes les méthodes représentant des use cases : savePreferences, updateBalance, deleteAccount, cancelAndReplaceForFolderClosing (même si en interne c&#039;est une méthode générique qui est appelée avec des paramètres différents)).
Il faut différencier les unités de code qui existent à cause d&#039;un besoin technique (remoting, technologie objet, persistance) de celles qui sont présentes quel que soit l&#039;environnement technique. Il faut faire cet exercice mental d&#039;épuration. On dégage ainsi le véritable fonctionnel (le noyau) et on s&#039;y consacre.
Exemple :
L&#039;interface graphique n&#039;appartient pas au domain model, c&#039;est juste la représentation graphique (plus ou moins user friendly) requise par le projet. Les interfaces client lourd, ligne de commande ou web sont totalement interchangeables du point de vue domain model. Elles appèleront la façade en back-end.
Les fonctionnalités graphiques, aussi avancées soient-elles, aident l&#039;utilisateur à utiliser l&#039;applicatif, elles ne définissent pas ce que l&#039;applicatif fait réellement.
La pratique la plus basique de domain modeling est le nommage des entités de code (classes, attributs, méthodes) et l&#039;organisation du code orienté fonctionnel et non technique (nom de package com.company.....user, com.company.accountmonitoring.balancemanagement, etc).
Ainsi les unités de code du domain model ne devraient avoir aucune dénomination technique de type DAO, Service, Manager, Interface, etc. Ces classes n&#039;appartiennent pas au domain model, elle assurent des fonctions techniques : persistance, exposition en remoting (EJB, Webservice, RMI pur, etc), utilisation du queueing pour notifier.
Par contre une méthode de type getUsersWithFullNameAsDefaultSort() sur la facade pourrait représenter un requis précis de l&#039;application.
Exposée en remoting ou pas, utilisée par un client graphique ou pas elle est exploitable. de plus elle révèle plus de choses sur ce qu&#039;elle fait réellement (cf Intention-Revealing Interfaces and methods).
Cette pratique va participer à refléter au maximum le fameux &#039;Ubiquitus Language&#039; d&#039;Eric Evans.
La 2ème pratique est la réflexion autour de la collaboration entre objets, la cardinalité (caractère obligatoire ou pas), la notion d&#039;ordre, la notion d&#039;unicité (qui se traduira en List, Set, Map, etc), les notions de composition (telle entité n&#039;a pas de raison de vivre sans telle autre), d&#039;héritage, de typage.
La 3ème pratique, qui suit le nommage est l&#039;enrichissement en comportement.
Un vrai domain model comporte des classes TRES enrichies en comportement.
En effet si une classe n&#039;est écrite que pour définir des getters et setters elle est pauvre. Sa richesse est définie par les comportements (méthodes) qu&#039;elle expose (éviter les &#039;anemic domain model&#039; d&#039;après Martin Fowler ).
Si une classe a toutes les informations pour définir un comportement, c&#039;est de sa responsabilité de le faire. On fait de l&#039;objet, autant profiter de sa puissance.
Un use case complexe fera participer plusieurs entités à sa décision.
ServiceX {
Collaborator collab1;
Collaborator collab2;
Collaborator collab3;
public EntityZ intentionRevealingMethod() {
if (!collab1.intentionRevealingMethod1() &amp;&amp;  collab2.intentionRevealingMethod2()) {
return null;
}
if (collab3.intentionRevealingMethod3()) {
throw new BusinessException();
}
// doSomething()
return new EntityZ;
}
}
Cette réflexion autour des responsabilités des objets permet d&#039;enrichir notre domain model et aucun framework de ne le fera pour nous (cf http://weblogs.asp.net/jamauss/archive/2008/07/17/how-to-determine-object-responsibility.aspx).
Pour atteindre ce niveau de coding et l&#039;appliquer systématiquement il faut beaucoup d&#039;expérience (skilled developpers comme le dit Martin Fowler), connaitre des patterns de refactoring (on ne fait pas un domain model optimal du 1er coup) à coupler avec des tests unitaires, une bonne connaissance des principes OO (lire les principes de Robert C Martin, de Martin Fowler, de Rod Johnson, etc), des connaissances de certains designs patterns et des frameworks pour les tâches techniques (spring, hibernate).
Il n&#039;existe pas de façon parfaite de coder, seulement des façons appropriées selon des contraintes définies qui constituent le contexte du projet.
On peut juste faire de notre mieux si on aime faire les choses bien.
Pour moi le DDD c&#039;est l&#039;élégance suprême! Bravo à Eric Evans et à ceux qui y arrivent.
Moi j&#039;essaie tous les jours et je n&#039;obtiens pas leur pourcentage de réussite ...
Je reste pourtant persuadé des bienfaits d&#039;une telle pratique.
Encore bravo d&#039;avoir initié une telle discussion!
En tant que fervent adepte du DDD, je t&#039;encourage à poursuivre.
Cordialement,
Louis, fervent adepte de l&#039;objet, du DDD et du TDD.</description> <content:encoded><![CDATA[<p>Félicitations à l&#8217;auteur de l&#8217;article.</p><p>Expliquer ce qu&#8217;est un design orienté domain model n&#8217;est pas aisé du tout.<br
/> C&#8217;est plus de l&#8217;ordre du bon sens c&#8217;est pour cela que ce n&#8217;est pas simple à formaliser.<br
/> Tant que l&#8217;on ne perd pas de vue que son but est la capture du fonctionnel par différentes pratiques de coding, on est bon.</p><p>En capturant la totalité du fonctionnel dans le code on réalise le programme &#8216;parfait&#8217; du point de vue d&#8217;un développeur car ça apporte une valeur inestimable en terme de compréhension, donc de reprise de code à des fins de refactoring (un code est amené à bouger car il reflète le changement du business et le niveau de compréhension du business à un instant T).<br
/> Comme la perfection n&#8217;existe pas il existe des pratiques qui vont nous permettre de l&#8217;approcher.</p><p>L&#8217;exercice consiste à se poser ces questions de façon récurrente :<br
/> &#8211; mon domain model reflète-t-il assez le fonctionnel ?<br
/> &#8211; mon domain model est-il indépendant de ma stratégie de persistance ? (ma stratégie de persistance peut changer : SGBD, mémoire vive; les requis fonctionnels doivent subsister)<br
/> &#8211; mon domain model est-il portable dans un autre langage objet ? (java, c++, c# ; les requis fonctionnels doivent subsister)<br
/> &#8211; mon domain model reflète-t-il les cas d&#8217;utilisation de facon exhaustive ? (La façade de mon application fait partie de mon domain model et doit comporter toutes les méthodes représentant des use cases : savePreferences, updateBalance, deleteAccount, cancelAndReplaceForFolderClosing (même si en interne c&#8217;est une méthode générique qui est appelée avec des paramètres différents)).</p><p>Il faut différencier les unités de code qui existent à cause d&#8217;un besoin technique (remoting, technologie objet, persistance) de celles qui sont présentes quel que soit l&#8217;environnement technique. Il faut faire cet exercice mental d&#8217;épuration. On dégage ainsi le véritable fonctionnel (le noyau) et on s&#8217;y consacre.<br
/> Exemple :<br
/> L&#8217;interface graphique n&#8217;appartient pas au domain model, c&#8217;est juste la représentation graphique (plus ou moins user friendly) requise par le projet. Les interfaces client lourd, ligne de commande ou web sont totalement interchangeables du point de vue domain model. Elles appèleront la façade en back-end.<br
/> Les fonctionnalités graphiques, aussi avancées soient-elles, aident l&#8217;utilisateur à utiliser l&#8217;applicatif, elles ne définissent pas ce que l&#8217;applicatif fait réellement.</p><p>La pratique la plus basique de domain modeling est le nommage des entités de code (classes, attributs, méthodes) et l&#8217;organisation du code orienté fonctionnel et non technique (nom de package com.company&#8230;..user, com.company.accountmonitoring.balancemanagement, etc).<br
/> Ainsi les unités de code du domain model ne devraient avoir aucune dénomination technique de type DAO, Service, Manager, Interface, etc. Ces classes n&#8217;appartiennent pas au domain model, elle assurent des fonctions techniques : persistance, exposition en remoting (EJB, Webservice, RMI pur, etc), utilisation du queueing pour notifier.<br
/> Par contre une méthode de type getUsersWithFullNameAsDefaultSort() sur la facade pourrait représenter un requis précis de l&#8217;application.<br
/> Exposée en remoting ou pas, utilisée par un client graphique ou pas elle est exploitable. de plus elle révèle plus de choses sur ce qu&#8217;elle fait réellement (cf Intention-Revealing Interfaces and methods).<br
/> Cette pratique va participer à refléter au maximum le fameux &#8216;Ubiquitus Language&#8217; d&#8217;Eric Evans.</p><p>La 2ème pratique est la réflexion autour de la collaboration entre objets, la cardinalité (caractère obligatoire ou pas), la notion d&#8217;ordre, la notion d&#8217;unicité (qui se traduira en List, Set, Map, etc), les notions de composition (telle entité n&#8217;a pas de raison de vivre sans telle autre), d&#8217;héritage, de typage.</p><p>La 3ème pratique, qui suit le nommage est l&#8217;enrichissement en comportement.<br
/> Un vrai domain model comporte des classes TRES enrichies en comportement.<br
/> En effet si une classe n&#8217;est écrite que pour définir des getters et setters elle est pauvre. Sa richesse est définie par les comportements (méthodes) qu&#8217;elle expose (éviter les &#8216;anemic domain model&#8217; d&#8217;après Martin Fowler ).<br
/> Si une classe a toutes les informations pour définir un comportement, c&#8217;est de sa responsabilité de le faire. On fait de l&#8217;objet, autant profiter de sa puissance.</p><p>Un use case complexe fera participer plusieurs entités à sa décision.<br
/> ServiceX {</p><p> Collaborator collab1;<br
/> Collaborator collab2;<br
/> Collaborator collab3;</p><p> public EntityZ intentionRevealingMethod() {</p><p> if (!collab1.intentionRevealingMethod1() &amp;&amp;  collab2.intentionRevealingMethod2()) {<br
/> return null;<br
/> }</p><p> if (collab3.intentionRevealingMethod3()) {<br
/> throw new BusinessException();<br
/> }<br
/> // doSomething()<br
/> return new EntityZ;<br
/> }<br
/> }</p><p>Cette réflexion autour des responsabilités des objets permet d&#8217;enrichir notre domain model et aucun framework de ne le fera pour nous (cf <a
href="http://weblogs.asp.net/jamauss/archive/2008/07/17/how-to-determine-object-responsibility.aspx" rel="nofollow">http://weblogs.asp.net/jamauss/archive/2008/07/17/how-to-determine-object-responsibility.aspx</a>).</p><p>Pour atteindre ce niveau de coding et l&#8217;appliquer systématiquement il faut beaucoup d&#8217;expérience (skilled developpers comme le dit Martin Fowler), connaitre des patterns de refactoring (on ne fait pas un domain model optimal du 1er coup) à coupler avec des tests unitaires, une bonne connaissance des principes OO (lire les principes de Robert C Martin, de Martin Fowler, de Rod Johnson, etc), des connaissances de certains designs patterns et des frameworks pour les tâches techniques (spring, hibernate).</p><p>Il n&#8217;existe pas de façon parfaite de coder, seulement des façons appropriées selon des contraintes définies qui constituent le contexte du projet.<br
/> On peut juste faire de notre mieux si on aime faire les choses bien.<br
/> Pour moi le DDD c&#8217;est l&#8217;élégance suprême! Bravo à Eric Evans et à ceux qui y arrivent.<br
/> Moi j&#8217;essaie tous les jours et je n&#8217;obtiens pas leur pourcentage de réussite &#8230;<br
/> Je reste pourtant persuadé des bienfaits d&#8217;une telle pratique.</p><p>Encore bravo d&#8217;avoir initié une telle discussion!<br
/> En tant que fervent adepte du DDD, je t&#8217;encourage à poursuivre.</p><p>Cordialement,<br
/> Louis, fervent adepte de l&#8217;objet, du DDD et du TDD.</p> ]]></content:encoded> </item> <item><title>Par : Nicolas Lecoz</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10307</link> <dc:creator>Nicolas Lecoz</dc:creator> <pubDate>Mon, 02 Feb 2009 15:02:05 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10307</guid> <description>Bonjour Karim,
Toutes les remarques et les critiques sont les bienvenues, voici les réponses et les éclaircissement de divers points :
&gt; Demain je rencontre un client, pourquoi son chef de projet accepterait ce type d’architecture……
Pourquoi une entreprise voudrait utiliser le DDD? Pour développer des applications qui investissent sur son métier. Pour être plus précis, il veut développer des applications qui lui permettent d&#039;implémenter son métier et de mieux comprendre son fonctionnement dans un contexte de logiciel. Par exemple il doit adapter son métier historique au monde de l&#039;e-commercre : vendre sur Internet et vendre en magasin présente chacune des spécificités fonctionnelles. Le DDD peut être une bonne manière de montée en compétence sur ce point.
De plus, il ne veut plus avoir des applications qui sont écrites un instant T et qui 2-3 ans plus tard sont refaites parce que l&#039;on a perdu la cohérence entre ce qui est défini entre les spécifications fonctionnelles et l&#039;implémentation. On se retrouve parfois à réécrire des applications parce que l&#039;on ne sait plus ce qu&#039;elles font réellement.
Enfin, le DDD encourage les équipes techniques et fonctionnelles à travailler ensemble et à s&#039;améliorer ensemble. Ces équipes seront un atout plus tard sur les autres projets.
&gt; Certes tu as mis en évidence l’élément le plus fondamentale Ubiquitus Language mais ta façon d’y arriver se fait un cheveux sur la soupe.
Comme j&#039;ai insisté dans cet article, le DDD a des techniques non intrusives et doivent d&#039;adapter aux organisations existantes. Ainsi il est difficile de dire comment les organisations existantes doivent faire pour communiquer entre elle. J&#039;ai juste fait des propositions afin de &quot;capturer la connaissance fonctionnelle&quot; comme l&#039;interview d&#039;expert fonctionnel par les équipes techniques, des lexiques des termes métiers ...
Si tu as un retour de terrain, cela intéresse les lecteurs afin qu&#039;il ait une meilleur compréhension de comment y arriver.
&gt; Beaucoup de personnes autour de moi ont du mal à voir la différence avec le MDA.
Oui c&#039;est assez déroutant tous ces acronymes consonants et qui cachent des concepts fondamentalement différents. Pour te révéler les secrets de fabrication de l&#039;article, à l&#039;origine l&#039;article s&#039;appeler &quot;les faux amis du DDD : TDD, MDA, MDD, MDSD, ...&quot;. En discutant en interne de Xebia, le sujet de l&#039;article n&#039;était pas approprié car le sujet reste le DDD. Je reinsiste sur la définition que j&#039;ai proposé : &quot;DDD est une manière de penser la conception autour du code, de collaborer et de communiquer avec les experts fonctionnels&quot;. Tandis que le MDA se base sur des modèles et heuristiques afin de générer le code source de l&#039;application. Même si les prédicats peuvent être semblable la démarche est totalement différents. En DDD, l&#039;implémentation est toujours réalisée par les développeurs. En MDA, l&#039;implémentation est en partie délégué à des outils. Ce qui est déroutant en DDD c&#039;est que ce fameux modèle n&#039;a rien à voir avec un modèle MDA.
&gt; Ton article manque d’exemple concret, tu reste trop en surface pour moi.
&gt; Je me permet d’être très critique sur ce sujet dans la mesure ou tu souhaites t’adresser aux non initiés, et que le sujet est extrement ambitieux.
Je vais proposer une série d&#039;article 2 ou 3 (je ne sais pas encore). Le 2è article sera consacré à un exemple : &quot;Dans un prochain article nous verrons comment concevoir une application avec les techniques proposées par le DDD&quot;.  Je n&#039;ai pas pour ambition de supplanter la référence qui reste les travaux d&#039;Eric Evans (son livre, son site http://domaindrivendesign.org/, et son site d&#039;exemple http://dddsample.sourceforge.net/.).
&gt; Par contre ayant l’expérience de projet, je nuancerais ce propos lorsque tu écris que le DDD marche avec toute méthode.
&gt; Les modèles métiers deviennent de plus en plus complexe, la seule façon d’y arriver consiste à travailler avec une approche itérative.
Je suis entièrement d&#039;accord avec toi. Comme dit plus haut le DDD n&#039;est pas intrusif donc il n&#039;impose pas de méthode de travail même si la manière de pensée du DDD se rapproche fortement de la pensée agile.
En espérant avoir pû t&#039;éclairer sur différents points, Nicolas LC (Xebia).</description> <content:encoded><![CDATA[<p>Bonjour Karim,</p><p>Toutes les remarques et les critiques sont les bienvenues, voici les réponses et les éclaircissement de divers points :</p><p>> Demain je rencontre un client, pourquoi son chef de projet accepterait ce type d’architecture……</p><p>Pourquoi une entreprise voudrait utiliser le DDD? Pour développer des applications qui investissent sur son métier. Pour être plus précis, il veut développer des applications qui lui permettent d&#8217;implémenter son métier et de mieux comprendre son fonctionnement dans un contexte de logiciel. Par exemple il doit adapter son métier historique au monde de l&#8217;e-commercre : vendre sur Internet et vendre en magasin présente chacune des spécificités fonctionnelles. Le DDD peut être une bonne manière de montée en compétence sur ce point.<br
/> De plus, il ne veut plus avoir des applications qui sont écrites un instant T et qui 2-3 ans plus tard sont refaites parce que l&#8217;on a perdu la cohérence entre ce qui est défini entre les spécifications fonctionnelles et l&#8217;implémentation. On se retrouve parfois à réécrire des applications parce que l&#8217;on ne sait plus ce qu&#8217;elles font réellement.<br
/> Enfin, le DDD encourage les équipes techniques et fonctionnelles à travailler ensemble et à s&#8217;améliorer ensemble. Ces équipes seront un atout plus tard sur les autres projets.</p><p>> Certes tu as mis en évidence l’élément le plus fondamentale Ubiquitus Language mais ta façon d’y arriver se fait un cheveux sur la soupe.</p><p>Comme j&#8217;ai insisté dans cet article, le DDD a des techniques non intrusives et doivent d&#8217;adapter aux organisations existantes. Ainsi il est difficile de dire comment les organisations existantes doivent faire pour communiquer entre elle. J&#8217;ai juste fait des propositions afin de &laquo;&nbsp;capturer la connaissance fonctionnelle&nbsp;&raquo; comme l&#8217;interview d&#8217;expert fonctionnel par les équipes techniques, des lexiques des termes métiers &#8230;<br
/> Si tu as un retour de terrain, cela intéresse les lecteurs afin qu&#8217;il ait une meilleur compréhension de comment y arriver.</p><p>> Beaucoup de personnes autour de moi ont du mal à voir la différence avec le MDA.</p><p>Oui c&#8217;est assez déroutant tous ces acronymes consonants et qui cachent des concepts fondamentalement différents. Pour te révéler les secrets de fabrication de l&#8217;article, à l&#8217;origine l&#8217;article s&#8217;appeler &laquo;&nbsp;les faux amis du DDD : TDD, MDA, MDD, MDSD, &#8230;&nbsp;&raquo;. En discutant en interne de Xebia, le sujet de l&#8217;article n&#8217;était pas approprié car le sujet reste le DDD. Je reinsiste sur la définition que j&#8217;ai proposé : &laquo;&nbsp;DDD est une manière de penser la conception autour du code, de collaborer et de communiquer avec les experts fonctionnels&nbsp;&raquo;. Tandis que le MDA se base sur des modèles et heuristiques afin de générer le code source de l&#8217;application. Même si les prédicats peuvent être semblable la démarche est totalement différents. En DDD, l&#8217;implémentation est toujours réalisée par les développeurs. En MDA, l&#8217;implémentation est en partie délégué à des outils. Ce qui est déroutant en DDD c&#8217;est que ce fameux modèle n&#8217;a rien à voir avec un modèle MDA.</p><p>> Ton article manque d’exemple concret, tu reste trop en surface pour moi.<br
/> > Je me permet d’être très critique sur ce sujet dans la mesure ou tu souhaites t’adresser aux non initiés, et que le sujet est extrement ambitieux.</p><p>Je vais proposer une série d&#8217;article 2 ou 3 (je ne sais pas encore). Le 2è article sera consacré à un exemple : &laquo;&nbsp;Dans un prochain article nous verrons comment concevoir une application avec les techniques proposées par le DDD&nbsp;&raquo;.  Je n&#8217;ai pas pour ambition de supplanter la référence qui reste les travaux d&#8217;Eric Evans (son livre, son site <a
href="http://domaindrivendesign.org/" rel="nofollow">http://domaindrivendesign.org/</a>, et son site d&#8217;exemple <a
href="http://dddsample.sourceforge.net/" rel="nofollow">http://dddsample.sourceforge.net/</a>.).</p><p>> Par contre ayant l’expérience de projet, je nuancerais ce propos lorsque tu écris que le DDD marche avec toute méthode.<br
/> > Les modèles métiers deviennent de plus en plus complexe, la seule façon d’y arriver consiste à travailler avec une approche itérative.</p><p>Je suis entièrement d&#8217;accord avec toi. Comme dit plus haut le DDD n&#8217;est pas intrusif donc il n&#8217;impose pas de méthode de travail même si la manière de pensée du DDD se rapproche fortement de la pensée agile.</p><p>En espérant avoir pû t&#8217;éclairer sur différents points, Nicolas LC (Xebia).</p> ]]></content:encoded> </item> <item><title>Par : Nicolas Lecoz</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10305</link> <dc:creator>Nicolas Lecoz</dc:creator> <pubDate>Mon, 02 Feb 2009 09:54:20 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10305</guid> <description>Bonjour,
Alexandre, merci pour ces précisions. En effet, une idée des fortes du DDD est la communication CONTINUE sur le fonctionnel tout au long du projet. Ainsi les équipes de développements et fonctionnelles doivent avoir la même connaissance à la fin des développements. Les équipes de développement ne doivent pas laisser de flou sur une implémentation de fonction et remonter toutes ces informations aux experts fonctionnelles. Sinon au fil de développement on a une version &quot;papier&quot; du logiciel, et une version &quot;code&quot; du logiciel, ce qui amènera beaucoup d&#039;interrogation sur le fonctionnement du logiciel et décrébilisera le logiciel et ses équipes.
Fabien, belle initiative et je te souhaite que ça marche. Pour informations Eric Evans a entrepris une initiative semblable http://dddsample.sourceforge.net/.
Et pourquoi implémenter leur exemple avec Qi4J ! ;-). As-tu des expériences avec ce framework, Sébastien?</description> <content:encoded><![CDATA[<p>Bonjour,</p><p>Alexandre, merci pour ces précisions. En effet, une idée des fortes du DDD est la communication CONTINUE sur le fonctionnel tout au long du projet. Ainsi les équipes de développements et fonctionnelles doivent avoir la même connaissance à la fin des développements. Les équipes de développement ne doivent pas laisser de flou sur une implémentation de fonction et remonter toutes ces informations aux experts fonctionnelles. Sinon au fil de développement on a une version &laquo;&nbsp;papier&nbsp;&raquo; du logiciel, et une version &laquo;&nbsp;code&nbsp;&raquo; du logiciel, ce qui amènera beaucoup d&#8217;interrogation sur le fonctionnement du logiciel et décrébilisera le logiciel et ses équipes.</p><p>Fabien, belle initiative et je te souhaite que ça marche. Pour informations Eric Evans a entrepris une initiative semblable <a
href="http://dddsample.sourceforge.net/" rel="nofollow">http://dddsample.sourceforge.net/</a>.</p><p>Et pourquoi implémenter leur exemple avec Qi4J ! <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . As-tu des expériences avec ce framework, Sébastien?</p> ]]></content:encoded> </item> <item><title>Par : I.T. aware &#187; JavaCamp III : TDD et DDD</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10281</link> <dc:creator>I.T. aware &#187; JavaCamp III : TDD et DDD</dc:creator> <pubDate>Sat, 31 Jan 2009 16:38:32 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10281</guid> <description>[...] le concept et sa mise en application à travers le framework Qi4J Xebia vient juste de publier un article sur le sujet et l&#8217;explique bien mieux que moi. Je vous conseille tout de même de jeter un [...]</description> <content:encoded><![CDATA[<p>[...] le concept et sa mise en application à travers le framework Qi4J Xebia vient juste de publier un article sur le sujet et l&#8217;explique bien mieux que moi. Je vous conseille tout de même de jeter un [...]</p> ]]></content:encoded> </item> <item><title>Par : Karim</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10280</link> <dc:creator>Karim</dc:creator> <pubDate>Sat, 31 Jan 2009 16:07:14 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10280</guid> <description>Bonjour Nicolas, je trouve ton article très intéressant mais trop scolaire ;-).
J&#039;ai du mal a saisir tes enjeux, j&#039;aimerai bien les connaitre.
Demain je rencontre un client, pourquoi son chef de projet accepterait ce type d&#039;architecture......
Certes tu as mis en évidence l&#039;élément le plus fondamentale Ubiquitus Language mais ta façon d&#039;y arriver se fait un cheveux sur la soupe.
Ensuite je trouve que ton article s&#039;adresse vraiment aux initiés
Beaucoup de personnes autour de moi ont du mal à voir la différence avec le MDA.
Ton article manque d&#039;exemple concret, tu reste trop en surface pour moi.
Je me permet d&#039;être très critique sur ce sujet dans la mesure ou tu souhaites t&#039;adresser aux non initiés, et que le sujet est extrement ambitieux.
Par contre ayant l&#039;expérience de projet, je nuancerais ce propos lorsque tu écris que le DDD marche avec toute méthode.
Les modèles métiers deviennent de plus en plus complexe, la seule façon d&#039;y arriver consiste à travailler avec une approche itérative.
Si tu travailles sur des projet en cascade, le risque sera de faire du DDD en mode conceptuel......
A bientôt content de rejoindre ton club DDD
Cordialement Karim</description> <content:encoded><![CDATA[<p>Bonjour Nicolas, je trouve ton article très intéressant mais trop scolaire <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .<br
/> J&#8217;ai du mal a saisir tes enjeux, j&#8217;aimerai bien les connaitre.<br
/> Demain je rencontre un client, pourquoi son chef de projet accepterait ce type d&#8217;architecture&#8230;&#8230;<br
/> Certes tu as mis en évidence l&#8217;élément le plus fondamentale Ubiquitus Language mais ta façon d&#8217;y arriver se fait un cheveux sur la soupe.<br
/> Ensuite je trouve que ton article s&#8217;adresse vraiment aux initiés<br
/> Beaucoup de personnes autour de moi ont du mal à voir la différence avec le MDA.<br
/> Ton article manque d&#8217;exemple concret, tu reste trop en surface pour moi.<br
/> Je me permet d&#8217;être très critique sur ce sujet dans la mesure ou tu souhaites t&#8217;adresser aux non initiés, et que le sujet est extrement ambitieux.<br
/> Par contre ayant l&#8217;expérience de projet, je nuancerais ce propos lorsque tu écris que le DDD marche avec toute méthode.<br
/> Les modèles métiers deviennent de plus en plus complexe, la seule façon d&#8217;y arriver consiste à travailler avec une approche itérative.<br
/> Si tu travailles sur des projet en cascade, le risque sera de faire du DDD en mode conceptuel&#8230;&#8230;<br
/> A bientôt content de rejoindre ton club DDD<br
/> Cordialement Karim</p> ]]></content:encoded> </item> <item><title>Par : Sébastien Letélié</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10279</link> <dc:creator>Sébastien Letélié</dc:creator> <pubDate>Sat, 31 Jan 2009 15:06:28 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10279</guid> <description>Un framework à connaître qui implémente les concepts du DDD : Qi4J (http://www.qi4j.org).</description> <content:encoded><![CDATA[<p>Un framework à connaître qui implémente les concepts du DDD : Qi4J (<a
href="http://www.qi4j.org" rel="nofollow">http://www.qi4j.org</a>).</p> ]]></content:encoded> </item> <item><title>Par : Fabien Bézagu</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10252</link> <dc:creator>Fabien Bézagu</dc:creator> <pubDate>Thu, 29 Jan 2009 08:50:57 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10252</guid> <description>Je suis ravi de constater qu&#039;il se passe des choses autour de DDD. Je profite de l&#039;occasion pour faire un peu de communication autour d&#039;un site que je suis, avec des amis, en train de lancer doucement : http://www.dddfrance.org . Pour l&#039;instant, le contenu est limité mais nous avons créé un site dont le principe est d&#039;être enrichi par les expériences et les questions de chacun.</description> <content:encoded><![CDATA[<p>Je suis ravi de constater qu&#8217;il se passe des choses autour de DDD. Je profite de l&#8217;occasion pour faire un peu de communication autour d&#8217;un site que je suis, avec des amis, en train de lancer doucement : <a
href="http://www.dddfrance.org" rel="nofollow">http://www.dddfrance.org</a> . Pour l&#8217;instant, le contenu est limité mais nous avons créé un site dont le principe est d&#8217;être enrichi par les expériences et les questions de chacun.</p> ]]></content:encoded> </item> <item><title>Par : Alexandre de Pellegrin</title><link>http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/#comment-10236</link> <dc:creator>Alexandre de Pellegrin</dc:creator> <pubDate>Wed, 28 Jan 2009 12:30:41 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1409#comment-10236</guid> <description>Merci pour cet article. Pour autant, je me demande comment un équipe de développement peut s&#039;engager sur une implémentation sans avoir saisi le métier de son client. Il est d&#039;ailleurs communément reconnu qu&#039;en fin de projet, le développeur connait mieux le métier que l&#039;utilisateurµ. Normal : le développement ne permet pas de laisser de zones d&#039;ombre. Pour moi, adopter le DDD, c&#039;est bien sûr poser le modèle métier. Enfin ça, on le fait déjà depuis pas mal de temps  (même avant Merise.) Mais le DDD, c&#039;est aussi donner le comportement métier du modèle. Cela se traduit notamment dans le code par l&#039;écriture de classes non anémiques. Petit bémol tout de même, seul le coeur de code est concerné. Tout le reste (en dehors d&#039;un package &#039;domain&#039; par exemple) conserve sa forte technicité.
Alex dP</description> <content:encoded><![CDATA[<p>Merci pour cet article. Pour autant, je me demande comment un équipe de développement peut s&#8217;engager sur une implémentation sans avoir saisi le métier de son client. Il est d&#8217;ailleurs communément reconnu qu&#8217;en fin de projet, le développeur connait mieux le métier que l&#8217;utilisateurµ. Normal : le développement ne permet pas de laisser de zones d&#8217;ombre. Pour moi, adopter le DDD, c&#8217;est bien sûr poser le modèle métier. Enfin ça, on le fait déjà depuis pas mal de temps  (même avant Merise.) Mais le DDD, c&#8217;est aussi donner le comportement métier du modèle. Cela se traduit notamment dans le code par l&#8217;écriture de classes non anémiques. Petit bémol tout de même, seul le coeur de code est concerné. Tout le reste (en dehors d&#8217;un package &#8216;domain&#8217; par exemple) conserve sa forte technicité.</p><p>Alex dP</p> ]]></content:encoded> </item> </channel> </rss>
