2009-08-18 5 views
3

Je pense à l'implémentation d'une approche de conception pilotée par le domaine (similaire à celle décrite here), mais je souhaite l'intégrer à Doctrine ORM. Est-ce que quelqu'un a eu du succès à faire quelque chose comme ça? Mon instinct initial était d'utiliser Doctrine comme couche DAO, mais il semble un peu compliqué pour Doctrine de mapper mes champs de base de données, et mes objets d'entité correspondent (essentiellement) au même ensemble de champs sur l'objet Doctrine.Utilisation de la Doctrine avec la conception par domaine

Mon objectif initial était de séparer toute ma logique DQL/requête de mes entités de domaine, mais maintenant je me sens un peu perdue dans la terre de conception-modèle pour le moment.

Je sais que Doctrine 2 est censé fournir une approche beaucoup plus amicale aux techniques DDD, mais je ne suis pas sûr de vouloir attendre aussi longtemps. Est-ce que ce que je veux faire est sensé, ou devrais-je trouver une autre approche?

Merci.

Répondre

2

La doctrine est, à mon avis, imparfaite pour DDD en raison de l'absence d'une classe Repository. Doctrine prend en charge des modèles tels que Table Data Gateway et Active Record qui, bien que de bons modèles pour certains problèmes, ne sont pas nécessairement le meilleur choix pour les DDD 'classiques'. Vous pouvez cependant contourner ces lacunes.

Une option consiste à dériver de Doctrine_Table et l'utiliser comme référentiel pauvre. Par exemple, si vous avez une classe appelée 'BlogPost', vous pouvez avoir une classe de table 'BlogPostTable', héritant de Doctrine_Table. Vous pouvez ensuite ajouter des méthodes telles que 'findByCategory' à la classe BlogPostTable, en conservant une telle logique distincte de vos objets de domaine (qui héritent de Doctrine_Record). Ce n'est pas exactement la même chose que les modèles préconisés par DDD «pur», mais c'est assez proche.

Même sans les mêmes motifs de conception, vous pouvez toujours utiliser les informations centrales de DDD. Le principal est le langage ubiquitaire, le concept consistant à essayer de décrire votre domaine en utilisant un langage précis qui est lisible par les experts du domaine et les développeurs.

+0

Merci. Je pense que cette réponse reflète complètement mes expériences. La cheville carrée de Doctrine ne semble pas s'adapter correctement au trou rond de DDD. J'ai fini par traiter mes classes Doctrine_Record comme mes entités, et j'ai implémenté une classe Repository de base en utilisant Doctrine_Table comme une couche DAO. Bien qu'il me donne la plupart de la séparation que je voulais, il se sent un peu maladroit, ou sur-architecturé, car les dépôts se sentent parfois un peu redondants. –

+0

Trébuché sur cette réponse de Google et pensé qu'il serait intéressant de noter que cela est maintenant obsolète, comme Doctrine2 implémente le modèle Data Mapper et les entités sont POPO, le rendant parfait pour DDD et adhérant magnifiquement à SRP. –

Questions connexes