- Blog Xebia France - http://blog.xebia.fr -
DDD – La conception qui lie le fonctionnel et le code
Posted By Nicolas Lecoz On Mercredi 28 janvier 2009 @ 11:25 In Divers | 9 Comments
Le DDD, Domain Driven Design, laisse une impression qui amène souvent à une des remarques suivantes :
L’objectif de cet article est de vous présenter le DDD, ses enjeux et son intérêt.
Dans DDD, il y a Driven Design, c’est donc une technique de conception. Il ne faut pas confondre avec les techniques de développement (Driven Development) comme par exemple le TDD (Test Driven Development).
DDD n’est ni une méthode ni une technologie. DDD est une manière de penser la conception autour du code, de collaborer et de communiquer avec les experts fonctionnels.
Cet élément de communication est une dimension importante. C’est pourquoi nous aborderons dans cet article les thèmes suivant :
La conception logicielle soulève de nombreuses questions. Dans le cadre de notre article, la conception peut être considérée comme une manière de concevoir et d’implémenter un ensemble de fonctionnalités en respectant un ensemble de considérations.
Il existe de nombreuses considérations plus ou moins importantes suivant les contextes et les organisations : Adaptabilité, coût, compatibilité, maintenabilité, modularité, performance, productivité des développements, qualité, réutilisabilité, robustesse, sécurité, simplicité, testabilité, ergonomie, utilisabilité, …
Il faut donc choisir les considérations et les prioriser afin d’orienter la conception. La conception peut imposer de mettre en place une méthode (processus, livrable, formalisme) et/ou des techniques afin de concrétiser la conception lors de l’implémentation en code source.
Au fil du temps, les progressions technologiques nous ont permis de construire des programmes de mieux en mieux structurés. Programmes qui d’ailleurs eux aussi évoluent vers des logiciels au fonctionnement de plus en plus complexes. Nous avons donc évolué de l’assembleur au Java en passant par le C et le C++. Aujourd’hui, afin de construire des applications de gestion, il est commun d’utiliser un langage qui implémente les concepts de la programmation orientée objet (POO) comme Java ou C#.
Afin de prendre en compte la complexité croissante des applications, il faut avoir un plan d’actions de développement avec une conception.
Le chemin est long entre les fonctionnalités demandées et décrites dans un logiciel et l’implémentation avec le paradigme objet et un langage OO. Il y a énormément de liberté pendant la phase conception. La POO ne nous guident pas assez lors de la conception.
Ainsi, avec un tel modèle, les techniques de conception de la POO ne garantissent pas une bonne conception, il faut donc des concepteurs très talentueux !
En premier lieu, une bonne conception permet de développer un logiciel qui répond aux fonctionnalités demandées. Idéalement, elle permet l’évolution et la maintenance du logiciel. Les évolutions ne doivent pas remettre en question toute la conception et l’implémentation. Une bonne conception est un ensemble de considérations comme par exemple la flexibilité, la robustesse ou la maintenabilité suite à des évolutions et des corrections.
Pour tendre vers une bonne conception, une stratégie est de découper l’application en modules en suivant la règle « diviser pour mieux régner ». Ces modules suivent des règles à respecter :
Il existe de nombreux travaux et ouvrages sur la conception de personnes reconnues comme expert dans le domaine comme Bertand Meyer, fondateur du langage objet Eiffel, Robert C. Martin, ou encore Martin Fowler. Leurs travaux sont résumés dans le document Principes avancés de conception objet.
Le DDD a été introduit par Eric Evans en 2003. Il a construit cette approche de conception suite à des retours d’expérience. Le DDD est centré sur le métier de l’application et le code source qui l’implémente.
Si vous êtes prêts à suivre les prédicats suivants :
Le DDD vous aidera :
Le DDD est une manière de penser et de communiquer les problèmes et leurs solutions, entre les équipes techniques et fonctionnelles.
La conception est conduite par un modèle. Ce modèle est en partie constitué d’un langage de communication commun aux experts fonctionnels et aux équipes de développement.
Les avantages d’avoir un Domain Model sont :
Cela conduit aussi les équipes de développement à investir sur le fonctionnel des applications d’entreprises.
Il faut tout d’abord que les développeurs se familiarisent avec le fonctionnel. Pour cela il faut une communication privilégiée entres les développeurs et les fonctionnels :
On dit que l’on forme l’Ubiquitous Language.
Ces termes se retrouveront tels quels dans le code source. De manière générale, les développeurs doivent apprendre et monter en compétence sur le fonctionnel afin de concevoir au mieux le domaine métier des applications.
Le DDD n’impose ni formalisme ni méthode pour acquérir ce savoir. L’interview d’expert fonctionnel par des développeurs peut être une solution. La communication entre ces deux entités doit être continue tout au long du projet.
Ce modèle apporte donc aux applications développés avec le DDD :
Il existe des incompatibilités de vocabulaire entre les développeurs et les experts fonctionnels :
Il faut un langage commun de communication entre ces deux types de population. Il faut créer un Ubiquitous Language. Ces termes se retrouveront directement dans le Domain Model et donc dans le code source.
Il y a des pièges à éviter. Par exemple, si les spécifications sont en français et que les conventions de nommage des artefacts de programmation sont en anglais, différentes erreurs peuvent survenir :
Les développeurs doivent réutiliser le jargon des experts fonctionnels dans leurs explications et dans le code source.
Ce langage de communication permet :
Les choses importantes à avoir en tête lorsque l’on parle du DDD sont :
Vous l’aurez remarqué, le DDD est une approche de conception non intrusive, mais ne résout pas tous les problèmes. Cela a pour grand avantage d’avoir une manière de concevoir flexible et évolutive tout en respectant un certain nombre de pratiques déjà adoptées et éprouvées dans vos équipes. Par exemple, elle peut être associée à UML et/ou TDD sans que cela soit une obligation.
De plus, le DDD ne nécessite pas d’atelier logiciel particulier, n’impose pas de formalisme et n’impose pas non plus de méthode de développement.
Dans un prochain article nous verrons comment concevoir une application avec les techniques proposées par le DDD.
Références à ne pas manquer à propos du DDD :
Article printed from Blog Xebia France: http://blog.xebia.fr
URL to article: http://blog.xebia.fr/2009/01/28/ddd-la-conception-qui-lie-le-fonctionnel-et-le-code/
Click here to print.