Question

Quick Q pour vous, experts en modèles.

Je souhaite un modèle de référentiel découplé de la technologie d'accès aux données, car je ne l'ai pas encore décidé et que je souhaite qu'il soit flexible. Donc, cela pourrait être L2S, L2E, NHibernate, Lightspeed ou autre.

Mais je suis confus au sujet de cette affaire UnitOfWork.

Dans le monde L2S, cela semble être votre DataContext.

Mais qu'en est-il d'un monde non-L2S, imaginez que j'utilisais du SQL écrit à la main, par exemple.

Ma question est qui fait quoi? Dans ma méthode Repo.Save (), cela devrait-il appeler le UnitOfWork.Commit qui génère ensuite le SQL INSERT / UPDATE requis?

Vous ne vous attendez pas à une réponse définitive, mais quelques discussions seraient utiles, juste pour m'assurer que je suis sur la bonne voie!

Merci

Était-ce utile?

La solution

Les référentiels peuvent certainement appeler commit / save / submit sur l'objet d'unité de travail, ou ils peuvent laisser cela au consommateur. Je préfère ce dernier scénario, car il permet au consommateur de contrôler la durée de vie de l'instance d'unité de travail, ce qui lui permet d'engager plusieurs référentiels:

// outside the repository layer
// int productId defined elsewhere
// int quantity defined elsewhere

IUnitOfWork unitOfWork = ... instantiate/get a new instance of your DataContext ...

ProductRepository productRepository = new ProductRepository(unitOfWork);
Product product = productRepository.GetById(productId);

Order order = new Order();
order.AddOrderLine(product, quantity);

OrderRepository orderRepository = new OrderRepository(unitOfWork);
orderRepository.Add(order);

unitOfWork.Save(); // This calls SubmitChanges() on the DataContext
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top