Domanda

Quick Q per voi esperti di pattern là fuori.

Voglio un modello di repository che sia disaccoppiato dall'attuale tecnologia di accesso ai dati, dato che non l'ho ancora deciso e voglio che sia flessibile. Quindi, questo potrebbe essere L2S, L2E, NHibernate, Lightspeed o altro.

Ma mi sto confondendo su questa cosa UnitOfWork.

Nel mondo L2S, questo sembra essere il tuo DataContext.

Ma che dire di un mondo non L2S, immagina di usare SQL scritto a mano, ad esempio.

La mia domanda è chi fa cosa? Nel mio metodo Repo.Save (), questo dovrebbe chiamare UnitOfWork.Commit che quindi genera il codice SQL INSERT / UPDATE richiesto?

Non aspettandomi una risposta definitiva, ma qualche discussione sarebbe buona, solo per essere sicuro di essere sulla strada giusta!

Grazie

È stato utile?

Soluzione

I repository possono certamente chiamare commit / save / submit sull'unità di lavoro oggetto, oppure potrebbero lasciarlo al consumatore. Preferisco quest'ultimo scenario, perché consente al consumatore di controllare la durata dell'istanza dell'unità di lavoro, il che consente al consumatore di impegnare più repository:

// 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top