Unit of work design pattern dla ASP .NET MVC

0

Hej.

Potrzebuję jak najwięcej materiałów dotyczących wzorca projektowego Unit of Work dla C# a najlepiej ASP .NET MVC.
Może być wszystko: linki, tutoriale czy pdfy.

Ogólnie w googlach bardzo mało jest na ten temat a chodzi mi o konkretne przykłady wraz z zastosowaniem.
Łączenie ASP MVC i Entity Framework z Unity of Work.

Z góry dzięki.

1

Wrzucam Ci kod z mojej aplikacji:

 public interface IUnitOfWork: IDisposable
    {
        void Committ();
    } 
namespace Domain.Repositories
{
    using global::Domain.Interfaces;

    using NHibernate;

    public class UnitOfWork: IUnitOfWork
    {
        private readonly ISession session;
        private ITransaction transaction;
        bool disposed = false;

        public UnitOfWork(ISession session)
        {
            this.session = session;
            this.transaction = session.BeginTransaction();
        }

        public void Committ()
        {
            if (!this.transaction.IsActive)
            {
                throw new Exception();
            }

            this.transaction.Commit();
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

        protected virtual void Dispose(bool a)
        {
            if (disposed)
                return;
            if (a)
            {
                this.transaction.Dispose();
                this.transaction = null;
            }
            disposed = true;
        }

        ~UnitOfWork()
        {
            Dispose(false);
        }
    }
}
 

Potem w global.asax mapuje sobie interfejs do klasy.

Konstruktor przykładowej klasy (Dependency Injection sobie robie):

 private readonly IUnitOfWork unitOfWork;

        public AdminController(          
            IUnitOfWork unit)
        {
            this.unitOfWork = unit;
        }

i przykładowe wykorzystanie:


if (ModelState.IsValid)
            {
                // jakiś kod
                unitOfWork.Committ();
            }
0

Dzięki wielkie. A powiedz mi tworzysz osobne repozytorium dla każdego modelu czy generycznie jedno repozytorium? Działa to również z CodeFirst ?

1

Działa z codefirst, dlaczego niby nie. Natomiast co masz na myśli poprzez "model" ? Repozytoria tworze na podstawie tabel w bazie. Jeśli mam tabele np. User no to będę miał UserRepository.

0
ne0 napisał(a):

Działa z codefirst, dlaczego niby nie. Natomiast co masz na myśli poprzez "model" ? Repozytoria tworze na podstawie tabel w bazie. Jeśli mam tabele np. User no to będę miał UserRepository.

Miałem na myśli fakt, że tworząc aplikacje w code first, każda z tabeli opiera się na jakimś modelu i czy dla każdej tabeli należy stworzyć repozyrium :)

Tabelo Produkt --> ProduktRepository itp

To mi już odpowiedziałeś :)

Ale wiem, że da się to zrobić w sposób generyczny, żeby za każdym razem nie tworzyć osobnych repozytoriów a mieć tylko jedno wspólne dla wszystkich modeli.

1

Repozytoria tworzy się dla encji, nie tabeli. To, czy encja jest mapowana na jedną czy pięć tabel w bazie, jest kwestią konfiguracji i działania ORM, a nie logiką biznesową, której częścią są repozytoria.
Repozytorium generyczne używane przez logikę biznesową to antywzorzec.

1 użytkowników online, w tym zalogowanych: 0, gości: 1