0

Je m'interroge sur l'utilité de créer un calque dal avec EF. Pourquoi ne pas appeler directement EF dans la couche de gestion, en considérant EF DBContext est un référentiel unitOfWork et List DBSet sont des référentiels? Alors pourquoi ajouter une couche DAL supplémentaire, qui est finalement une façade .. Le seul avantage que je vois, est dans le cas où nous devons changer l'implémentation de l'accès aux données, comme remplacer EF par Hibernate ou autre. Mais honnêtement, je n'ai jamais vu cela arriver.Couche DAL utilitaire avec structure d'entité 6

+0

"appeler EF directement dans la couche de gestion" - où exactement? Dans l'objet métier lui-même? Dans le cadre d'un script de service/transaction qui exécute le cas d'utilisation métier? Dans un objet de type référentiel distinct résidant dans la couche de gestion? – guillaume31

+0

@ guillaume31, pas l'objet businness lui-même, mais les services. Par exemple: OrderService public (repo IOrderRepository) { \t this.repo = repo } public void Save (ordre de OrderDTO) {var \t OrderEntity = ConvertDTOToEntity (ordre); \t si (OrderEntity.CheckBusinessRules()) \t \t repo.Save (OrderEntity) } – BobyOneKenobi

+0

http://programmers.stackexchange.com/questions/235094/ensure-that-each-class-has-only-one- responsabilité-pourquoi – guillaume31

Répondre

2

En fait, avec un mappeur de données, la nécessité de développer un DAL est tout simplement inutile car il contient 0 lignes de code.

Tout sur le dessus d'un mappeur de données ne sont pas une couche d'accès aux données mais domaine réel, car une implémentation mappeur de données comme un OR/M se traduit vos objets dans les données relationnelles sous-jacentes et vice-versa, et vous travaillez sur le dessus d'entre eux est de développer votre domaine et manquer la douleur de l'impédance relationnelle objet.

Le point d'introduire le modèle du référentiel sur une mappeur de données est parce que vous voulez à la fois être en mesure de changer le magasin de données sous-jacente même à un non-relationnel à long terme (aussi, passer de NoSQL à SQL, qui sait!), et il y a une autre raison définitive pour introduire la couche de dépôt dans votre logiciel: parce que vous voulez pouvoir simuler le magasin de données avec des fausses afin de tester votre domaine. Enfin, même lorsque Entity Framework implémente unité de travail et d'autres modèles, leur implémentation peut parfois ne pas convenir à vos propres besoins de domaine et vous devez les envelopper pour donner plus de concrétion à votre domaine.

+0

D'accord à propos de faux, mais je pense que le changement des données sous-jacentes reste rare et ne justifie pas de passer 20% de temps supplémentaire – BobyOneKenobi

+0

@BobyOneKenobi Temps supplémentaire aujourd'hui, moins de temps demain;) –

+0

@bobyonekenobi BTW si vous savez comment écrire votre codez le DDD de manière à ce que vous n'ayez pas besoin de 20℅ de temps supplémentaire. Si c'est la première fois que vous implémentez DDD, peut-être que la perte de temps se produit parce qu'il y a une courbe d'apprentissage ... –