Entités ORM contre Domaine des Entités sous Entity Framework 6.0
Je suis tombé sur les deux articles suivants Première et Deuxième dans lequel l'auteur affirme en résumé que les Entités ORM et le Domaine des Entités ne devraient pas être mélangés.
Je fais face à ce problème pour le moment comme je code avec EF 6.0 à l'aide du Code de la Première approche. J'utilise les classes POCO comme des entités dans l'EF ainsi que mon domaine/business objects. Mais je me retrouve souvent dans la situation où je me définir comme une propriété publique ou une propriété de navigation virtuelle uniquement parce que l'EF-Cadre qui m'oblige à le faire.
Je ne sais pas quoi prendre comme la ligne de fond de ces deux articles? Dois-je vraiment créer par exemple un CustomerEF de la classe de l'entité ainsi qu'un cadre de CustomerD pour mon domaine. Puis créer un référentiel qui consomme CustomerD cartes à CustomerEF faire quelques requêtes et que les cartes reçues CustomerEF à CustomerD. Je pensais que EF est tout au sujet de la cartographie de mon domaine entités de données.
Donc merci de me donner quelques conseils. Dois-je ignorer une chose très importante à l'EF est capable de me fournir? Ou est-ce un problème qui ne peut pas complètement résolu par l'EF? Dans ce dernier cas, ce qui est une bonne façon de gérer ce problème?
- Juste un humble rappel, votre "Premier" et "Second" liens ne fonctionnent pas pour le moment
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec l'idée générale de ces postes. Un ORM modèle de classe est partie d'une couche d'accès aux données d'abord et avant tout (même si elle est composée de soi-disant POCOs). Si un conflit d'intérêts entre la persistance et la logique d'entreprise (ou de toute autre préoccupation, les décisions doivent toujours être prises en faveur de la persistance.
Cependant, comme les développeurs de logiciels, nous avons toujours à l'équilibre entre purisme et de pragmatisme. De savoir si ou de ne pas utiliser la persistance du modèle comme un modèle de domaine dépend d'un certain nombre de facteurs:
La taille et de la cohérence de l'équipe de développement. Lorsque l'ensemble de l'équipe sait que les propriétés peut être public, tout simplement parce que de l'ORM exigences, mais ne doit pas être tous sur la place, il peut ne pas être une grosse affaire. Si tout le monde sait (et obéit à une propriété ID est de ne pas être utilisé dans une logique d'entreprise, ayant les Id ne peut pas être une grosse affaire. Un dispersées, inexpérimentés ou indisciplinés de l'équipe peut avoir besoin de plus rigoureux de la ségrégation du code.
Le chevauchement entre la logique métier des préoccupations et de la persistance. La conception orientée objet se développe quand un modèle de classe de colle à SOLIDE principes. Mais ces principes ne sont pas nécessairement en contradiction avec la persistance. Je veux dire que, bien que les préoccupations sont différentes, à la fin de leur résultante exigences peuvent être très similaires. Par exemple, les deux préoccupations peut exiger d'objet valide de l'état et les associations correctes.
Il peut y avoir des cas d'utilisation, cependant, dans lequel les objets ont besoin temporairement d'être dans un état absolument ne doit pas être stocké. Cela peut être une raison de travailler avec des classes du domaine. Une autre raison peut être que le modèle d'entité ne peut tout simplement pas répondre à la meilleure segmentation des responsabilités. Par exemple, un processus d'affaires "liste noire" client peut exiger de données éparpillées sur si de nombreux objets de l'entité que de nouvelles classes de domaine doit être conçue qui peut encapsuler les données et les méthodes de travail sur eux. En d'autres termes: faire ceci par des entités qui contreviendrait à la Dire de Ne pas Poser de principe.
La nécessité pour les couches. Par exemple, si la couche d'accès aux données cibles différents fournisseurs de base de données, il peut être composée de pièces interchangeables qui sont spécifiques au fournisseur (par exemple, pour tenir compte des différences subtiles dans les types de données entre Oracle et Sql Server, ou de les exploiter au fournisseur des caractéristiques spécifiques). À l'aide de la persistance du modèle comme modèle de domaine serait probablement saigner des implémentations spécifiques au vendeur dans la logique d'affaires. Ce serait vraiment mauvais. Il y a la couche d'accès aux données doit être précisément que une couche.
(Très banal), La quantité de données. Création d'objets prend du temps et des ressources. Lors de "de nombreuses" les objets sont impliqués dans une entreprise cas il n'est peut-être trop cher à construire à la fois les objets de l'entité et des objets du domaine.
Et plus, sans aucun doute.
Donc, je serais toujours essayer d'être un pragmatique. Si les classes d'entité faire un travail décent, d'aller pour elle. Si le décalage est trop grand, de créer un domaine d'affaires pour les parties appropriées de la logique métier. Je ne voudrais pas servilement suivre une (toute) modèle de conception juste parce que c'est un bon modèle. Contrairement à ce qui est dit dans le post, il nécessite beaucoup d'entretien à la carte d'un modèle d'entité sur un modèle d'affaires. Quand vous vous trouvez la création d'une multitude de classes qui sont presque identiques pour les classes d'entité, il est temps de repenser à ce que vous êtes en train de faire.
InsertDateTime
, etc.