Programmation orientée composite

This entry was posted by on Dimanche, 24 août, 2008 at

Mais que manquait il donc à la programmation orientée objet pour inventer un nouveau concept ? Selon Rickard Öberg les meilleures pratiques et les patrons de conception ne répondent pas complètement à certaines problématique de modélisation. La conception dirigée par le domaine montre qu’en effet les objets ont des comportements différents suivant les contextes dans lesquels ils sont utilisés. Un modèle objet se doit d’être capable de s’adapter au changement.

Bien que pour un domaine soit défini un ensemble d’objets métiers communs leur exploitation et le comportement attendu change selon le besoin des applications qui les utilisent. Pour répondre à cette attente Rickard Öberg et Niclas Hedhman ont développé un framework : Qi4j (chee for jay). A partir des concepts de l’AOP, du DI et du DDD, ils ont conçu l’approche composite implémentée entièrement avec Java 5.

Le framework est encore en cours de finition, mais l’idée est intéressante et prolonge encore les concepts actuels implémentés dans Improve Foundation et Spring (dependency injection, inversion of control). On retrouve la notion de couche (un des avantage de IF par rapport à Spring) mais aussi de module et d’assemblage. Le Composite est un objet composée de différents “Fragments” qui peuvent être

  • des “Mixins” : ensemble d’implémentation d’interfaces,
  • des “Concerns” : intercepteurs de méthodes (concept de l’AOP)
  • des “Constraints” : contraintes sur les entrées/sorties de méthode (concept du design by contract),
  • des “SideEffects” : action non vraiment liée à l’objet, qui peut être réutilisée par différents objets

Les avantages sont surtout un modèle bien plus proche du métier qui répond bien au concept DDD d’Eric Evans. Les inconvénients restent l’apprentissage et donc l’adoption. Enfin reste à connaître les performances, ce qui n’est pas encore fait. Je ne pense pas que cela soit un concurrent d’Improve Foundation ou Spring mais plutôt un complément auquel il va falloir s’intéresser.

Qi4j : la documentation est encore en cours d’élaboration mais les concepts sont bien présentés

DDD présentée par Eric Evans en deux parties :