.Net Core Eğitimleri

7-) Paging Altyapısı

Paging Nedir ve Neden Kullanılır?

Web apimizi kullanacak istemciler için database üzerinde bulunan kayıtların listesini döneceğimiz metot ya da metotlarımız olacak. Bu metotları kontrol ederek kısıtlamaz isek bağlanan istemci veritabanında bulunan yüksek miktarda veriyi gereksiz yere tek seferde çekmeye çalışabilir. 5000 kayıt barındıran bir müşteri tablomuz olduğunu varsayalım ve bu müşterileri frontend tarafında ekranda listelemeye ihtiyacımız olsun. Kullanıcı bu sayfaya her girdiğinde backend den sürekli olarak 5000 kayıt mı isteyeceğiz? Birde bu uygulamayı yüzlerce kişinin kullandığını düşünecek olursak ortaya ciddi bir alt yapı maliyeti çıkacaktır. Oysaki biz bu 5000 kaydın her seferinde sadece 50 tanesini göstersek ve bir paging alt yapısı kursak, her seferin bir kullanıcı en fazla 50 kayıt görüntüleyebilir ve diğer kayıtları görmek için paging linklerinden faydalanabilir.

Ne elde etmiş olduk?

Bu sayede backend tarafında gereksiz yere kaynak kullanımının önüne geçmiş oluruz. Sadece sunucu tarafında değil aynı zamanda sunucu ve istemci arasında oluşacak trafik üzerinde de ciddi anlamda iyileştirme yapmış oluruz. Common projemizin içinde bulunan paging klasörüne aşağıdaki dosyaları oluşturalım. Paging klasörüne sağ tıklayarak Add –> Class diyoruz ve oluşturacağımız sınıfın adına PagingParams yazarak ekliyoruz. Eklediğimiz PagingParams.cs dosyasına çift tıklayarak aşağıdaki şekilde içeriğini değiştiriyoruz.

Daha sonra paging modeli ile birlikte göndereceğimiz linklerin modelini oluşturuyoruz. Bunun için Paging klasörüne sağ tıklayarak Add –> Class diyeceğiz ve LinkInfo ismi ile kaydedeceğiz. Daha sonra LinkInfo.cs dosyasına sağ tıklayarak aşağıdaki şekilde içeriğini değiştireceğiz.

Sayfalanmış bir model geriye dönerken bu modele bir header bölümü ekleyeceğiz. Bu header kısmında kaç adet muhtemel sayfa olduğu, şuan kaçıncı sayfanın frontend e gönderildiği, gönderilen sayfada kaç satır bilgi olduğu ve toplam tüm sayfaların satır sayılarının toplamı gibi bilgiler vereceğiz. Bunun için Paging klasörüne PagingHeader isminde bir sınıf oluşturacağız. Oluşturduğumuz PagingHeader.cs dosyasına çift tıklayarak içeriğini aşağıdaki şekilde düzenleyelim.

Sayfalama yapılmış bir liste oluşturmak için biraz önce oluşturduğumuz PagingHeader sınıfınıda içerecek bir sınıf oluşturacağız. Bu sınıf bizim için sayfalanmış bir sonuç ve bu sonuca dair header bilgilerini tutacak. Paging klasörüne sağ tıklıyoruz Add –> Class diyerek Name alanına PagedList yazıyoruz ve kaydediyoruz. Daha sonra eklediğimiz PagedList.cs dosyasına çift tıklayarak içeriğini aşağıdaki şekilde düzenliyoruz. 

Yukarıda kodladığımız paging yapısını birleştirecek ve geri dönüş için kullanılacak bir sınıf oluşturacağız. Bu sınıfa OutputModel ismini vereceğiz. Tüm sayfalama işlemleri tamamlandığında bu sınıf içinde son halini alacak ve istemciye gönderilecek. Bunun için Paging klasörüne sağ tıklıyoruz Add –> Class diyoruz ve Name alanına OutputModel yazarak kaydediyoruz. Daha sonra OutputModel.cs dosyasına çift tıklayarak içeriğini alağıdaki şekilde değiştiriyoruz.

Paging klasörünün altına Interfaces isminde bir klasör açıyoruz, bu klasör bizim için interfaceleri barındıracak. Sonra bu Interfaces klasörü içerisine IPagingLinks isminde bir interface oluşturuyoruz. Oluşturduğumuz IPagingLinks.cs dosyasına çift tıklayalım ve aşağıdaki şekilde içeriğini düzenleyelim.

Son olarak linkleri oluşturacak ve IPagingLinks arayüzünü implemente edecek sınıfımızı oluşturuyoruz. Öncesinde IPagingLinks arayüzünü oluşturma sebebimiz dependency injection kullanabilmek.

Interface’ler ve Dependency Injection

Uygulamamızın mümkün olduğunca doğrudan bağımlılıklara sahip olmasını engellememiz gerekiyor. Dependency injection ile bu bağımlılıkları arayüzler vasıtası ile enjekte ediyoruz. Örnek verecek olursan bu sınıfın yaptığı işi daha farklı şekilde yapan başka bir sınıfımız olabilir ve biz bu backend projeyi A müşterisinde mevcutta yazdığımız şekilde B müşterisinde başka bir sınıfla yapmak mecburiyetinde kalabiliriz. Bu durumda eğer arayüzler ile çalışarak dependency injection kullanıyor isek yapmamız gereken tek şey o arayüzü implemente eden iki farklı sınıf yazmak ve ileride göreceğimiz startup.cs dosyası içerisinde deploy aşamasında hangi sınıfın bu arayüz ile eşleştirileceğini belirtmek olacak. Paging klasörüne sağ tıklayalım Add –> Class diyerek Name alanına PagingLinks yazarak kaydedelim. Daha sonra bu dosyaya çift tıklayarak içeriğini aşağıdaki şekilde güncelliyoruz. 

Sonuç

Bu son işlemi de yaptığımızda artık paging alt yapımız hazır hale gelmiş oluyor. Eğer işlem adımlarını doğru uyguladıysak Solution Explorer üzerinde aşağıdaki ekran görüntüsündeki gibi bir yapı görüyor olmalıyız.

Paging nedir, paging yapısı
Paging işlemlerinin doğru yapılması sonucunda görülmesi gereken sonuç.

Common projemiz için tek eksik kalan nokta AutoHistory ve logging alt yapısı. Sonraki derste bu özellikleri projemize dahil edeceğiz.  Buraya kadar olan kısmı kontrol etmek için projenin son haline github sayfamdan bu link ile ulaşabilirsiniz. Benimle iletişime geçmek için yorum kısmını kullanabilir ya da mail atabilirsiniz. 
Mail Adresim : mehmetalierol@windowslive.com

<- Önceki Post – Sonraki Post ->

Leave a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir