Des conseils sur la cartographie des entités à des objets du domaine
Je suis actuellement en train de travailler dans un projet où nous avons commencé à construire une application à l'aide d'une approche DDD. Nous sommes maintenant à la recherche en utilisant Entity Framework 6 le premier code pour nous aider avec la persistance des données. Ma question est la meilleure façon de gérer les données de mappage entre nos objets du domaine et de l'EF entités?
Vous devez vous connecter pour publier un commentaire.
De conserver votre application et vous-même sain d'esprit sur le long terme, jamais, JAMAIS démarrer votre DDD app avec persistance les questions connexes (ce que db, ce qui orm etc) et TOUJOURS (oui, toujours) appuyez sur la db comme le dernier stade du développement.
Modèle de votre nom de Domaine et en fait de tout autre modèle, à l'exception de la persévérance. Utiliser le modèle d'espace de stockage pour garder l'application découplée de la Persistance. Définir les pensions de l'interface selon les besoins de l'application et ne sont pas liés à la db de la méthode d'accès (c'est pourquoi vous êtes la mise en œuvre de la persistance, plus tard, de sorte que vous n'obtiendrez pas tenté de couple de votre application pour la persistance de détails).
Écrire en mémoire des implémentations pour les pensions des interfaces, cela signifie généralement une simple wrapper sur une liste ou un dictionnaire, donc c'est TRÈS rapide à écrire et plus important encore trivial de changement. Utilisez-les pour réellement tester et de développer l'application.
Après que les interfaces sont stables et que l'application fonctionne alors il est temps d'écrire la persistance de mise en œuvre de l'endroit où vous pouvez utiliser ce que vous voulez. Dans votre cas, EF et là, il vient de la cartographie.
Maintenant, c'est très subjectif, il n'y a pas de bonne ou de mauvaise façon, il ya la façon dont VOUS préférez faire les choses.
Personnellement, j'ai l'habitude d'utiliser les souvenirs que je reçois le souvenir de l'objet du domaine et ensuite manuellement la cartographie à la (micro)ORM entités. La raison pour laquelle je le fais manuellement est parce que mes souvenirs de contenir des objets de valeur. Si je serais à l'aide de AutoMapper j'avais besoin de confingure elle et, en fait, j'aimerais écrire plus de code que de le faire manuellement
Mise à jour (2015)
Ces jours-ci je viens de Json l'objet et soit utiliser un modèle de lire ou de le stocker directement dans un modèle de lire avec un
Data
colonne qui contient l'objet sérialisé. J'utilise des Souvenirs seulement pour des cas très spécifiques. < /mise à jour>En fonction de votre domaine d'objets et la façon dont l'EF entités look que vous pourriez sortir avec l'aide de automapper pour la majorité de la cartographie. Vous allez avoir un moment plus difficile de tester vos référentiels de bien.
C'est à vous de comment vous le faites, trouver la façon dont il convient à votre style et il est facilement maintenable, mais JAMAIS de concevoir ou de modifier votre domaine d'objets pour les rendre plus compatibles ou pour correspondre à l'ORM entités. Il n'est pas sur la modification des bases de données ou Orm, c'est à propos d'un Domaine (et le reste de l'application) correctement découplée de la Persistance de détails (qui l'ORM est).
Afin de résister à la tentation de réutiliser les choses qui sont les autres, les couches détails de mise en œuvre. La raison de l'application est structurée en couches est parce que vous voulez de découplage. Garder de cette façon.
Pourquoi ne pas simplement utiliser EF entités comme des objets de Domaine puisque vous êtes à la recherche dans l'aide de Entity Framework 6 le premier code? Alors d'abord vous Domaine de la conception de Modèle de Données de la structure de Base.
J'ai été en utilisant NHibernate et de croire qu'en EF vous pouvez également spécifier des règles de mappage de DB tables pour vos objets POCO, en particulier avec EF6. C'est un effort supplémentaire pour développer une autre couche d'abstraction plus EF entités. Laissez ORM en être responsable.
Je ne suis pas d'accord avec cet article que vous pouvez lire "Entity Framework 5 avec AutoMapper et un Modèle de Référentiel" et il existe de nombreux autres articles où les gens utilisent simplement EF entités comme des objets de Domaine:
AutoMapper sera certainement vous aider lorsque vous commencez à construire la couche présentation et face à beaucoup de l'INTERFACE utilisateur spécifique des modèles de vue. Il est utile dans la construction de anémique modèles et un peu inutile avec de vrais objets de Domaine quand il n'y a pas public setters.
Il y a un vieux post par Jimmy Bogard "Le cas pour les deux sens de la cartographie dans AutoMapper" où il raconte que
"There is no two-way mapping because we never need two-way mapping."
Id
seulement. Il y a un piège classique dans Orm - ils faire de référencement globale des racines par référence très facile.Oh non, je ne voudrais pas ajouter que couche supplémentaire à tous.
NHibernate et Entity Framework Code First (j'avais utiliser EF) sont conçus pour résoudre ce problème exact de mappage de vos objets de domaine pour votre modèle relationnel (qui n'ont pas les mêmes contraintes sur leur conception, de sorte pourrait, et devrait, être une forme différente).
Semble juste dommage de perdre l'excellente cartographie des capacités de EF et de le remplacer par quelque chose d'autre, même AutoMapper.
entity.Hydrate(memento)
méthode ou somesuch?