UnitOfWork Kalıbı

Unit of Work kalıbını veritabanı ile yapılacak bütün işlemleri tek bir kanaldan yürütme ve bir yerde hafızada tutmayı amaçlar. Bu sebeple katmanlı mimaride DAL(Data Acces Layer) içerisinde yer alır. Unit of Work yapılan işlemlerin bir birim üzerinden ele alıp, bu olayları saklayan daha sonra ise toplu halde kaydedilmesi, bir hata ile karşılaşıldığında geri alınması ve ya iptal edilmesini sağlamaktır.

Unit of Work tasarım kalıbı genellikle repository tasarım kalıbıyla birlikte kullanılmaktadır. Ancak bu şart değildir. Elinizde CRUD işlemlerinin yapıldığı sınıflar olması da yeterlidir. Ana mantık bir DBContext’i Repository sınıflarımıza vermektir.

Temel olarak ;

1. CRUD işlemlerinin yapıldığı sınıflara Unit Of Work içerisinden DbContext verilmeli.

2.CRUD işlemini yapan sınıf kaydetme işlemlerini DBContext ‘in SubmitChanges() metodunu çağırmamalı onun yerine işlemler Unit of Work sınıfına yazılmış Save() metodu çağırmalı. Yani tüm işlemleri Unit of workte yapacağımızdan save işlemi de unit of workte bulunmalı.

3.İşlemleri veri tabanına aktarma sırasında hata ile karşılaşıldığında Rollback işlemleri için metot yazılmalı.

Avantajları

1. Veri iletişimini tek kanaldan sağlamak.

2. Veritabanıyla alakalı bir problem meydana gelirse nereye bakmamız gerektiğini biliyor oluruz.

3. Kod tekrarının önüne geçip tekrar tekrar ihtiyaç duyulabilecek sorguları metoda bağlamak.

4. İleride entity frameworkten vazgeçip yerine bir ORM kullanacağımızı varsayalım tek dokunmamız gereken kısım DAL olacaktır.