ReCapProject

Projenin Konusu

İstenilen arabayı kiralamaya yarar. Kişi giriş yapmamışsa arabaların bulunduğu sayfayı (componenti) görebilir. Her arabanın detay sayfası vardır. Giriş Yapmamış olan kişi detaylara gidebilir fakat kiralama yapabilmek için giriş yapması gerekir. Kayıt Ol ve Giriş Yap sayfaları mevcuttur. Giriş yapan kişi kiralama işlemini gerçekleştirmek için findeks puanının yeterli olması gerekir. Eğer yeterliyse ödeme sayfasına yönlendirilir. Eğer Kredi Kartı mevcutsa işlem başarılı olur değilse kredi kartı eklenir ve ödeme gerçekleştirilir. Giriş yapan kişi yeni araba, marka ve renk ekleme, silme ve güncelleme işlemlerini ayrıyeten profilini güncelleme işlemini gerçekleştirebilir.

Kullanılan Teknolojiler

  • .NET
  • ASP.NET
    • Microsoft'un web geliştirme ortamının ve bunları içeren kütüphanelerin toplandığı yapıdır.
    • .NET projelerindeki web projelerine verilen isimdir.
    • Apı Restful Mimariyi destekler.
    • Restful Mimari, geliştirdiğimiz .NET'i tanımayan bir Java uygulamasının, IOS uygulamasının vb. bizim sistemimizle iletişim kurmasını sağlayan bir ortamdır.
    • Proje, ASP.NET.Core altyapısıyla geliştirilmiştir.
  • EntityFramework Core
  • Autofac
    • Instance üretimini sağlayan yapıdır.
  • FluentValidation
    • Eklemek istediğin varlığı, iş kurallarına dahil etmek için bu nesnenin yapısal olarak uygun olup olmadığını kontrol etmeye yarar.
    • Mesela sisteme kayıt olurken min şu kadar karakter olmalı, şifre şuna uymalı gibi kurallar yani yapısal uyuma doğrulama denir.
  • MsSql
  • Angular for Frontend

Kullanılan Teknikler

  • Layered Architecture Design Pattern
  • AOP
    • Bir metodun önünde, sonunda veya hata verdiğinde çalışan kod parçacığı AOP mimarisi ile yazılır.
    • Autofac AOP imkanı sunuyor.
    • Bu sayede .NET'in IoC Container'ına Autofac enjekte edilir.
  • JWT
    • Kullanıcının login olmak istediği bilgiler geçerliyse bu kullanıcıya token verilir.
    • Bu token Json Web Token denilen formata sahip şifreli bir metindir.
    • Kullanıcıya verildikten sonra kullanıcı bunu değiştiremez.
    • Kullanıcı yapacağı istekleri bu token ile gerçekleştirir.
  • Autofac dependency resolver
  • IOC (Inversion of control)
    • Değişimin Kontrolü
    • Hiçbir katman diğerini newlemez, bu işlemi IoC yapar.
    • Mesela CarController'ın ICarService'e ihtiyacı varsa, ASP.NET, Web API IoC Container'a bakar karşılık geleni kullanır.
    • Tüm bellekte bir tane CarManager oluşturulur. Birden fazla client gelsede hepsine aynı instance referansını verir.

Katmanlar

Proje, farklı katmanlar oluşturularak Plug and Play (Tak ve Çalıştır) Sistemler şeklinde yazıldı.

1.Business

Kuralların yazıldığı yerdir. Her zaman yeni bir kural gelir. Mesela Arabanın günlük kira fiyatı 0' dan büyük olmalıdır.

  • Business katmanı Entities ve Data Accesse bağımlıdır.
  • Bu katmanda soyut olan servisler ve onların somutu olan manager classları yer alır.
  • Bu classlar ilgili entity için CRUD operasyonlarını ve isteğe göre farklı operasyonları içerir. (getAll, getById vb.)

  • Messages içinde string mesajlar tutulur ilgili mesaj buradan çağırılır.

  • Autofac/AutofacBussinessModule içinde Service istenilen durumda o service nin managerini registe eder.
  • SingleInstance tek bir instance oluşturur.

  • ValidationRules/FluentValidation içerisinde ilgili entity için istenilen iş kuralı yazılır. (DailyPrice boş olamaz, DailyPrice 0 dan büyük olmalıdır gibi)

2.Core

Ortak kodların koyulduğu katmandır ve bütün projelerde kullanılabilir. Evrensel kodları içerir.

  • Diğer katmanları referans almaz.
  • Diğer katmanlara bağımlı değildir.
  • Bütün projelerde kullanılabilir.
  • Hangi katmanla ilgilenilecekse o katmanla ilgili klasör koyulur.
  • Entityframework base hale getirilir. Data Access Katmanının yükü hafifler.
  • Aspects klasörü içerisinde Caching, Transaction, Performance ve Validation yer alır.
  • Caching, Yapılan istekler serverdaki bellekte tutulur. İstenilen data cache'de varsa cache'den getirilir. Yoksa veritabanından getirilir ve cache'e yazılır.
  • Transaction, tutarlılığı korumak için yapılan yöntemdir.
  • Performance, Metodun önünde kronometreyi başlatır geçen süreyi hesaplar. Bu şekilde performans zafiyetine neden olan metod bulunur.
  • Validation, nesnenin yapısal olarak uygun olup olmadığını kontrol eder.
  • Cross Cutting Concerns, uygulamayı dikine kesen ilgi alanlarıdır. (Loglama, Cache, Validation, Transaction, Authorization)
  • Utilities/Results Klasörü işlem sonuçlarını kontrol etmeye yarar. (data, success, message)

3.Data Access

Veriye ulaşmak için yazdığımız kodları içeren katmandır. Veriye erişim için farklı teknikler vardır. İlerde bu tekniklere yenisini eklemek veya çıkarmak istersek diğer katmanlar bundan etkilenmez.

  • İş yapan classları oluşturulurken ilk önce onun interfacesi oluşturulur.
  • I ile başlayanlar interfacelerdir
  • Dal (Data Access Layer)
  • Entities katmanını kullanmak için referans vermek gerekir. Bu yüzden Data Access katmanı Entities katmanına bağımlıdır.

4.Entities

Varlıkların yazıldığı katmandır.

5.API

Business ve Data Access API katmanı vasıtasıyla dış dünyaya açılır.

  • Controllers
    • Gelen istekleri karşılar.
    • Yapılabilecek istekler kodlanır.
    • İstek Restful --> HTTP üzerinden gelir.
    • Business katmanında yazdığımız service'leri kullanarak Http Post Get işlemleri yapılır.