Co jest powodem implementacji twojego UOW, a raczej co ona zawiera?
Piszę projekt wolnym czasie w którym chciałbym wykorzystać jak najwięcej wzorców tak by struktura była dobrze zaprojektowana, oraz żeby nauczyć się jak najwięcej.
Wiem że toczy się dyskusja czy repozytorium jest w ogóle potrzebne i czy jest sens używania UoW.
W projekcie który piszę (nie będzie on jakiś skomplikowany) pewnie nie ma konieczności używania tych wzorców, chociaż z doświadczenia powiem że wolę mieć jasno wyznaczone miejsce w którym zdefiniowane są wszystkie zapytania do bazy, a nie rozwalone po całej aplikacji poprzez dobijanie się do DbContextu i tworzenie po parę razy tych samych zapytań. Nigdy wcześniej nie używałem UoW(w pracy problem był rozwiązywany przez DbContext.Save()).
Po przeczytaniu paru artykułów zdecydowałem się na użycie niegenerycznego repozytorium oraz UoW.
Tutaj zawartość moich klas:
public interface IUnitOfWork : IDisposable
{
IUserRepository Users { get; }
IRequestRepository Requests { get; }
ITimeSlotRepository TimeSlots {get; }
void Complete();
Task CompleteAsync();
}
public class UnitOfWork : IUnitOfWork
{
private readonly ManageItDbContext _context;
public UnitOfWork(ManageItDbContext context)
{
_context = context;
Users = new UserRepository(_context);
Requests = new RequestRepository(_context);
TimeSlots = new TimeSlotRepository(_context);
}
//zawartość powinna mieć wszystkie repozytoria
public IUserRepository Users { get; private set; }
public IRequestRepository Requests { get; private set; }
public ITimeSlotRepository TimeSlots { get; private set; }
public void Complete()
{
_context.SaveChanges();
}
public async Task CompleteAsync()
{
await _context.SaveChangesAsync();
}
public void Dispose()
{
_context.Dispose();
}
}
Wszystko układało się chyba dobrze do momentu gdy zacząłem czytać o DI, z którym w pracy nie miałem styczności. Także nie wiem czy do każdej akcji w kontrolerze powinienem tworzyć osobny model i wywoływać jego nowy obiekt a wewnątrz dopiero za pomocą DI wstrzykiwać UoW? - może źle zrozumiałem poprzedniego posta.