Unıt Of Work Design Pattern
Kısaca açıklamak gerekirse bu pattern iş katmanında yapılan her değişikliğin anlık olarak database yansıması yerine tek bir kanaldan(tek bir transaction) toplu halde gerçekleşmesini sağlar.
Temel Olarak; 1- CRUD işlemleri yapıldığı sınıflara UnitOfWork içerisinden "DbContext" verilmeli 2- CRUD işlemini yapan sınıf kaydetme işlemlerini DBContext ‘in SubmitChanges() metodunu çağırmamalı onun yerine işlemle UnitOfWork sınıfına yazılmış Save() metodu çağırmalı. Yani tüm işlemleri UnitOfWorke yapacağımızdan save işlemi de UnitOfWorkte bulunmalı. 3- İşlemleri veri tabanına aktarma sırasında hata ile karşılaşıldığında Rollback işlemleri için metot yazılmalı.
Örnek : ATM den para çekme işleminde tüm veriler girip okey tuşuna basıldığında normal şartlarda biz hesabımızdan girdiğimiz para miktarı kadar çekilmesine izin vermiş olduk. Fakat hesabımızda bu kadar para yoksa verdiğimiz onay ne işe yarayacak sorusunun cevabını UnitOFWORK verir. UnitOfWork ile birlikte bu örnekteki bütün işlemler bittikten sonra ya işlem yapılır yada RollBack methodları çalışır. Böylece hesabımızda para varsa para çekmiş oluruz yoksa işlem sırasında girdiğimiz bütün veriler iptal edilir.
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.
1- Modeller
public class Department
{
public Department()
{
personels = new List<Personel>();
}
public int Id{get; set;}
public int Name{get; set;}
public ICollection<Personel> personels{get; set;}
}
public class Personel
{
public int Id{get; set;}
public int Name{get; set;}
public string LastName{get; set;}
public int DepartmentId{get; set;}
public Department Department{get; set;}
}
public class PersonnelContext : DbContext
{
public PersonnelContext() : base("")
{
}
public DbSet<Department> Departments {get; set;}
public DbSet<Personel> Personnels {get; set;}
}
2- Repository
3- Departmanlara özgü işlemlerin var ise
4- Unit Of Work Kısmı : Tüm Repository'ler burada toplanır.
5. Console UI Kısmı
Last updated
Was this helpful?