Dapper Repository Kullanımı ve Örnek Proje – 1

Merhaba Arkadaşlar, bugün kendimce biraz marjinal bir karar alayım dedim ve dapper repository kullanarak örnek bir proje makale serisi hazırlamaya karar verdim. Bu projenin içerisinde temel olarak sıfırdan bir proje açmayı ve EF, FNhibernet, vs… değil de data katmanında DapperRepository kullanarak işlemlerimi yapmayı düşünüyorum.

Dapper Nedir?

Son yıllarda yazılımdan çok yazılımın güvenliği, performansı ve işlevselliği daha büyük önem kazanmış durumunda. Bu neden ile aslında kendim de yaptığım ORM testlerinde epey bir fark ile dapper’ın performansını görmüş oldum. (Kısa bir süre sonra araya alarak dapper performansı ile ilgili yaptığım naçizane testlerimi de sizlerle paylaşmaya çalışacağım.)

İşte Dapper’da bu ORM’ler arasında gerçekten çok iyi performansa sahip bir ORM teknolojisi. EntityFramework, FluentNHibernet, vb… ORM’ler arasında internette de bulabileceğiniz performans farklarını görebilirsiniz.

Nitekim şöyle bir durum var ki, dapper ile repository’nizi inşa eder iken maalesef %100 sql sorgularını yazmaktan kaçamayabiliyorsunuz. Ancak bunun ortalamasını verecek olursak (ki bu tamamen benim kullanımım ile alakalı da olabilir) en fazla %5-10 sql sorgusu yazmak durumunda kalabiliyoruz. Tabi sonucunda yine dönüşlerin model olarak karşılandığını ve onun üzerinden işlem yapılabildiğini de belirtmek gerekir ki bu da zaten bizim aradığımız yazım kolaylığına bağlı kalmamızı sağlıyor.

Öncelikle kullanacağımız terimlerin bir kısmını naçizane açıklamayla başlayalım isterseniz;

Repository Nedir?

Genel olarak yazılımdaki CRUD (Create – Read – Update – Delete) işlemlerini, yani temel “okuma, ekleme, güncelleme ve silme” işlemlerini yürüttüğümüz sayfa veya kod bloğumuz da diyebiliriz. Bunu bir interface (arayüz) ile bağlayıp projemizde kullanıyor olacağız.

Generic Repository Nedir?

Yukarıdaki bahsettiğim repository’nin aynısı, ancak içerisine farklı tip ve özelliklere sahip sınıflar vererek kullanabileceğimiz kod sayfasıdır. Şimdilik bir satırlık bir örnek kullanım ile tanıştırayım bilmeyenleri;

IRepository<Customer> _customerRepository;

Bu şekilde tanımladığımız ve “_musteriRepository” yi kullanmak istediğimiz her noktada artık karşımıza içerisindeki tüm metodları “Musteri” sınıfına bağlı şekilde kullanabileceğimiz bir “Repository” nesnesi türetmiş olduk. İleride projemizde bu konuyu çok daha net kavrayabileceğimizi düşünüyorum.

Dependency Injection Nedir?

Özellikle katmanlı mimari de gerçekten ihtiyacımız olan, sınıflar ve interface’ler arasındaki bağımlılığı hem sağlayan, hem de bunu sağlarken de mümkün olduğunca esnek bir şekilde kullanmamıza imkan veren bir yöntemdir Dependency Injection.

Bir projeyi yapabilmek için mutlaka belli metodlara ihtiyacımız olacaktır. Örneğin;

  • ID’ye göre müşteriyi getirmek
  • Ad’a göre müşteriyi getirmek
  • Kullanıcı Adı’na göre müşteriyi getirmek
  • Kullanıcı Adı ve Şifre’ye göre müşteriyi getirmek
  • Tüm Müşterileri Getirmek
  • vs… vs…

İşte bu noktada oluşturduğumuz arayüz (Interface) ‘de tanımladığımız alanları arka planda hangi sınıfa (class) bağlayacak olursak olalım mutlaka ama mutlaka bu metodların olmasını isteyeceğiz. Yarın öbür gün arkadaki “Hizmet Veren” sınıf içerisindeki kodları tümüyle değiştirecek dahi olsak bu metodların olması gerekliliğini kurduğumuz “Bağımlılık” ile sağlayacağımızı bilmemiz kolaylaşıyor. Çünkü biz projemizin içerisinde kullanım sırasında sürekli olarak Interface’i referans gösterdiğimiz için, hizmet veren sınıf kısmında bir hatamız olması halinde öncelikle kodumuz bizi bu metodun olmadığına dair uyarıyor ve yayınlamamızı, vs… engellemiş de oluyor.

Bir interface’i bir sınıfa bağlayarak kullanabilmemiz için kodu yazmamız yeterli değildir.

public class CustomerService: ICustomerService

Projemiz ayağa kalktığı an itibari ile bu ilişkileri tanıyabilecek ve işleyebilecek bir tanımlayıcıya ihtiyaç duyar. İşte burada da dependency injection dediğimiz Türkçesi “Bağımlılık Ekleme” olarak çevirebileceğimiz yöntem işin içine girer.

Yine aynı cümleyi sarf edeyim, projemizin ilerideki aşamalarında kullanımını net ve detaylı şekilde gösteriyor olacağım.

Örnek Projemizin Konusu Ne Olacak?

Aklımdan yapmayı ve yayınlamayı düşündüğüm proje basit bir CRM uygulaması aslında. Kullanıcı girişinden içeride yapılacak bir iki işlemli operasyonlara kadar kodlanabilecek her alana giriş yapmış olacağız elimizden geldiğince.

Şimdilik böyle bir tanıtım yazısı ile konuyu kapatayım. Kısa süre içerisinde bir kaç makale dizisi halinde peyderpey yayınlıyor olacağım.

Lütfen sorularınız ve/veya tavsiyeleriniz olur ise hazır daha başlamadan önce iletirseniz çok sevinirim. 🙂

Herkese iyi çalışmalar…

Not: Projeye başladığımız andan itibaren her yazının sonunda (eğer yarıda kalmamış olur isek) örnek projenin kodlarına da o yazının altındaki linkten ulaşabileceksiniz.

0 0 vote
Article Rating
Subscribe
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments