Bu proje Engin Demiroğ hocanın C# ve Angular kampı boyunca geliştirilen Araç Kiralama Sistemidir.
Katmanlı mimari yapısı ile hazırlanan, EntityFramework kullanarak veritabanı işlemlerinin halledildiği, .Net Core Web Api ile çalışan bir backend projesidir. Proje, Solid Prensiblerine ve Design Pattern kurallarına uygun hazırlanmıştır.
Projede veritabanı olarak mssql kullanılmıştır. Proje localDb ile çalışmaktadır. LocalDb veritabanını Visual Studio programı içerisindeki SQL Server Object Explorer penceresi ile oluşturabiliriz. New Query diyerek verilen sql dosyasını çalıştırabilirsiniz.
Projede kullanılan tüm tablolar aşağıdaki fotoğrafta gözüktüğü gibidir.
Proje katmanli mimari kulanılarak hazırlanmıştır. Temel 5 katmanımız bulunmaktadır. Bu katmanlar Entities, DataAccess, Business, Core ve WebApi katmanlarıdır.
Çoğu katmanda yer alan iki ana klasör bulunmaktadır. Bunlar Abstract ve Concrete klasörleridir.
Abstract: Soyut nesnelerinin tutulduğu klasördür.
Concrete: Soyut nesnelerden türeyen somut nesnelerin tutulduğu klasördür.
Veritabanındaki tabloların karşılığı bu katmanda tutuluyor. Her bir tablo için bir entity oluşturmamız gerekiyor. Ayrıca Dto(Data Transfer Object) ile çaşitli entityleri kapsayan kendi nesnelerimizi oluşturabiliyoruz.
Veritabanı CRUD (Ekleme, Okuma, Güncelleme ve Silme) işlemlerini EntityFramework kullanarak bu katmanda hallediyoruz. Bu katman Core ve Entity katmanını referans alır. Diğer katmanlardan referans almaz.
Bu katman, uygulama katmanı(Web Api) ile DataAccess katmanı arasındaki veri işleme olayını gerçekleştirir. Bir nevi ikisi arasında köprü görevi görür. Bu katmanın önemli kısmı ise tüm doğrulama ve veri kontolünü gerçekleştirmesidir.
Bu katmanda Abstact, Concrete, Adapters, DependencyResolvers, ValidationRules ve Constant klasörleri bulunmaktadır.
Adapters: Dış servisleri projeye entegre ettiğimiz klasördür. Örneğin, kullanıcı Findeks puanını sorgulama işlemi burada gerçekleşir.
DependencyResolvers: Projedeki IoC yönetimi burada yer almaktadır. Yani tüm instance yönetimi bu klasörde yer almaktadır. Projede AutoFac kütüphanesi kullanılmıştır.
ValidationRules: Verileri kontrol ettiğimiz klasördür. Burada nesnenin verisinin ne olduğu, neleri alabileceklerini tanımlıyoruz. Örneğin bir arabanın fiyatı boş olamaz ve günlük fiyatı 0 ile 10.000 arasında olabilir.
Constants: Bu klasörde business katmanında kullandığımız değişmeyen değerleri tutuyoruz. Örneğin; Messages sınıfı.
Bu katman, projeden bağımsız olarak projenin ana çekirdek kısımlarını oluşturuyor. Bu katman asla diğer katmanları referans almaz. Bu katmanı istediğimiz herhangi bir projede hiç değişiklik yapmadan aynen kullanabiliriz.
Bu katmanda, Aspects, CrossCuttingConcerns, DataAccess, Entities, Extensions, Utilities ve DependencyResolver klasörleri yer almaktadır.
Aspects: Cache, performance, Transaction ve validation işlemlerinin yani AOP işlemlerinin yapıldığı klasördür.
CrossCuttingConcers: CCC işlemlerinin yapıldığı klasördür. Cache ve validation işlemleri bulunur.
DataAccess: Bu katmanda DataAccess katmanında yer alan Temel interface yapıları ve EntityFramework için genel Base sınıf bulunmaktadır.
Entities: Birbirinden bağımsız tüm projelerde yer alacak genel interface ve ana sınıflar bulunmaktadır.
Extensions: Kullandığımız hazır sistemlere ek özelliklerin eklendiği klasördür.
DependencyResolver: Core katmanında yer alan sistemlerin instance yönetimini sağladığımız klasördür.
Utilities: Core katmanının belkide en önemli kısmı bu diyebiliriz. Tüm alt araçların yer aldığı bu klasörde, Helper sınıflar, Interceptors, IoC, Results ve Security klasörleri bulunmaktadır. Bu klasörleri kısaca açıklar isek;
Helpers: Tüm projelerde yer alacabilecek yardımcı sınıfların yer aldığı klasördür.
Interceptors: AOP yapısının kurulduğu ve Attributelerin yönetildiği yerdir.
IoC: IoC yapısının yer aldığı yerdir.
Results: Bu klasörde uygulama boyunca verilerin yönetebilmeyi kolaylaştıran sınıflar yer almaktadır.Verinin bilgisi, mesaj bilgisi veya dönen verinin success bilgisini içerir.
Security: Jwt yapısının yer aldığı klasördür.
Bu katman, .Net Core Web Api projesi olarak inşa edilmiştir. Bu katmanda yazdığımız servisleri api olarak dışarı aktarıyoruz. Bu katmanda controller klasörü bulunmaktadır. Bu klasörde oluşturduğumuz tüm controller yer almaktadır. Tüm kontrollerdeki ortak olan işlemler olduğu için ResponseControllerBase abstract sınıfı yazılmıştır. Tüm controller'lar bu sınıftan türetilmiştir.
Yasin Torun 2021