2010-08-10 4 views
1

J'ai une ancienne base de données avec laquelle ma nouvelle application doit interagir. L'ancienne base de données est sur-normalisée et mal conçue en général. Par exemple, un objet dans mon domaine représente cinq tables dans la base de données. Je souhaite que ma couche de domaine reste exempte d'artefacts provenant de la base de données existante. Quel modèle dois-je utiliser ici?Mon référentiel a-t-il trop de logique?

À première vue, je pense à Repository Pattern. Je transmettrais mon objet au référentiel et le laisserais gérer la division des données dans les cinq tables. Cependant, il a été suggéré que tout le mappage à effectuer ajoute trop de logique au référentiel. Donc, il Repository un mauvais choix ici? Dois-je utiliser Repository avec un autre modèle (comme Adapter)? Ou le référentiel est-il le bon choix dans cette situation?

Répondre

3

Le modèle de référentiel est approprié ici, mais l'utilisation de Data Mapper, comme suggéré par DanP, aidera à adhérer au principe de responsabilité unique. Les ORM tels que NHibernate et Entity Framework facilitent généralement le rôle du Data Mapper, mais il peut être approprié d'implémenter cette logique vous-même si votre magasin de données n'est pas propice à l'utilisation d'un ORM. Jeff Morris fournit un très bon exemple d'utilisation de Data Mapper dans le contexte du modèle de référentiel here.

Pour l'enregistrement cependant, le travail d'un ORM est de combler le object-relational impedance mismatch. Un schéma de base de données relationnelle diffère souvent de la structure du modèle de domaine. Votre base de données peut très bien être mal conçue pour d'autres raisons, mais le manque de relation directe entre les entités et les tables ne doit pas être considéré comme un indicateur de mauvaise conception. Vu d'un point de vue DDD, où la base de données est considérée comme le magasin de persistance d'un domaine d'application, la base de données peut avoir été normalisée de manière appropriée pour le domaine d'origine pour lequel elle a été écrite.

+0

Cet article référençant le datamapper était très informatif +1 – DanP

0

Le modèle de passerelle pourrait-il aider? Créez une passerelle vers l'ancienne base de données. Placez toute la logique de conversion dans la passerelle.

2

Je pense que le modèle Data Mapper est ce que vous cherchez. Incidemment, vous pouvez probablement obtenir quelques idées sur le roulement à la main de votre accès aux données dans this series of posts par Davy Brion.

Je suis cependant intéressé, pourquoi ne pas regarder vers quelque chose comme NHibernate au lieu d'essayer de faire tout le sale boulot vous-même?

Questions connexes