Repository pattern ve tipik hatalar

repository-pattern.png
Repository pattern bir soyutlamadır. Amaç karışıklığı azaltarak kodun geri kalanını kalıcı kılmaktır.

Faydaları !

  • Unit testler yazmayı kolaylaştırır.
  • Kodun bakım ve yönetimi kolaylaşır.
  • CRUD (Create, Read, Update, Delete) işlemlerimizi hızlıca gerçekleştirebiliriz.

    Nasıl repository oluşturulur ?

    Repository pattern ‘ı doğru bir şekilde uygulayabilmek için izlemeniz gereken tek bir kural var.

    Repository sınıfınıza, ihtiyaç duyana kadar hiç bir şey eklemeyin !

Geliştiricilerin bir çoğu generic bir repository oluturup, içine ihtiyaç duyabilecekleri tüm fonksiyonları da ekleyerek bunu bir base class olarak kullanırlar. Bu yanlıştır.

Unit of Work

Unit of work design pattern ‘ı genellikle repository pattern ile birlikte kullanılır. Adından da anlaşılacağı gibi veritabanı işlemlerimizi tek bir kanaldan yürütmemizi sağlar.

Yapılan işlemlerin veritabanına toplu halde kaydedilmesi, herhangi bir hata olması durumunda rollback (geri alınması) ya da transaction iptali gibi işlemleri sağlayabiliriz.

Uygulama

Küçük bir örnek ile başlayalım.


Biraz da özelleştirelim.

Burada görüldüğü gibi sadece ihtiyacınız olan fonksiyonları oluşturun.

Entity Framework

Base class (taban sınıf)


Oluşturduğumuz taban sınıfımızı daha sonra repository sınıfımıza implement ediyoruz.

return ederken ToList(), FirstOrDefault() vb. çağrılıncaya kadar sorgu veritabanında yürütülemez.
Kullanmayı unutmayın !


Entity Framework için Unit of Work


Final

Tipik hatalar

Linq methodlarınızı dışarı açmayın

Eğer linq methodlarınızı açığa vurursanız yani dışarıya açarsanız (sızıntı) repository pattern ‘ı amacına uygun kullanamamış olursunuz. Sızıntılı bir soyutlama elde edersiniz. Genellikle IQueryable<T> ile.
Repository pattern yazının en başında da dediğimiz gibi soyutlamaya (abstraction) dayanır.

Bunu yapmayın:

Bu repository sınıfları hiç bir amaca hizmet etmiyor.

Lazy-loading öğrenin

Eğer bilmiyorsanız Google

0%