Mi chiedo se c'è un modo migliore per farlo o se sto facendo un po 'di anti-pattern qui. Come ho detto nell'argomento, sto cercando di condividere le chiamate al repository e la logica di mappatura degli oggetti tra i metodi dell'Unità di lavoro.
Ad esempio, vedi il mio metodo GetEnvelopeBody()
utilizzato più di una volta.
public class EnvelopeService
{
private EnvelopeRepository envelopeRepository;
private RecipientRepository recipientRepository;
private RecipientTabRepository recipientTabRepository;
public Envelope GetEnvelope(int id)
{
using (var uow = UnitOfWorkFactory.Create())
{
envelopeRepository = new EnvelopeRepository(uow);
recipientRepository = new RecipientRepository(uow);
recipientTabRepository = new RecipientTabRepository(uow);
// I'm extracting the repository calls and mapping
// code into this GetEnvelopeBody() so other methods
// that have their own Unit of Work can use it.
// This is to avoid multiple Unit of Work sessions?
// from colliding.
var envelope = GetEnvelopeBody(id);
uow.SaveChanges();
return envelope;
}
}
private Envelope GetEnvelopeBody(int id)
{
// repository calls and object mapping code goes here
}
public void SaveEnvelope(Envelope envelope)
{
using (var uow = UnitOfWorkFactory.Create())
{
envelopeRepository = new EnvelopeRepository(uow);
recipientRepository = new RecipientRepository(uow);
recipientTabRepository = new RecipientTabRepository(uow);
SaveEnvelopeBody(envelope);
uow.SaveChanges();
}
}
private void SaveEnvelopeBody(Envelope envelope)
{
CleanEnvelope(envelope);
// repository calls and object mapping code goes here
}
private void CleanEnvelope(Envelope newEnvelope)
{
var oldEnvelope = this.GetEnvelopeBody(newEnvelope.Id);
// Do other fancy stuff ...
}
}