.NET Core 3.1 ile proje hazırlayanlar için Katmanlı Mimari konusunda söyleyeceğim yeni şeyler var.
Öncelikle Angular’da SSR konusu gerçekten ciddi bir problem. SSR özelliği sanıldığı kadar başarılı çalışmıyor. Bu nedenle web sitelerimizde MVC kullanmaya devam etmemiz gerekebiliyor.
Ancak yönetim panelini Angular yapabiliriz.
Bu durumda katmanları şöyle tasarlayabilirsiniz.
- ÇözümAdı.Model Katmanı
Model katmanı Entity’leri ve Enum’ları içerir. Entity’lerde DataAnnotation’lar kullanılmaz. - ÇözümAdı.Data Katmanı
DbContext’lerimiz burada bulunur. Fluent-API’ler (Builder’lar) ve Migration’lar da yine burada bulunur. Generic BaseRepository sınıfımız ve UnitOfWork sınıfımız da interface’leriyle birlikte bulunur. İstenirse her entity için ayrı repository’ler de ilave edilebilir.Üyelik ve kişisel veriler için ayrı SQL Server kullanan ApplicationDbContext diğer veriler için ise ÇözümAdıDbContext şeklinde iki adet context kullanmanızı güvenlik için öneriyorum. ÇözümAdıDbContext veritabanında üyenin id’sini tutabilir ve iki veritabanı arasında herhangi bir ilişki bulundurmazsınız. ApplicationDbContext veritabanında kişisel verileri post-kuantum algoritmalarla şifreleyerek tutmayı unutmayınız. - ÇözümAdı.Service Katmanı
Servislerimizi CQRS paterni ile hazırlarız. Bu bağlamda Command’lar ve CommandHandler burada bulunur. Common Result Object’imiz de Query sınıflarımız da burada bulunur. Validation’ları CommandHandler’lar da yaparız. - ÇözümAdı.Infrastructure Katmanı
Mail gönderme, dosya işlemleri, Azure entegrasyonları için gerekli sınıflarımızı bu katmana ekleyebiliriz. Cutting-Edge katmanı olarak ta bilinen bu katmanda her katmanda ihtiyaç duyulabilecek sıradışı işleri yapıyoruz. - ÇözümAdı.Web Katmanı
Kök dizinde bir MVC web sitesi yer alır. Admin areasında ise Angular yönetim paneli bulunur. Generic servis katmanımızı kullanan bir Web API denetleyicimiz ve JWT üyelik işlemleri için bir Token denetleyicimiz de yine bu katmandadır.MVC proje doğrudan Service katmanını kullanabilir. Web API’den de yararlanabilir. Angular proje ise Token ve generic servis Web API denetleyicisini kullanır.Not: Angular yönetim panelini ayrı bir katman olarak ta tasarlayabilirsiniz. Ancak ben burada MVC proje altında yapma sebebim, tek bir web yayını ile hem MVC, hem Web API hem de Angular yayınlamasını birlikte yaparak hosting masraflarını düşürmektir. Ancak isteyenler bu üç görevi ayırmayı tercih edebilirler. Özellikle Angular katmanını ayrı yapmak tercih edilebiliyor.
- ÇözümAdı.Tests Katmanı
NUnit ile birim testleri yapabileceğimiz katman. Selenium testleri de bu katmanda yazılabilir. - ÇözümAdı.Mobile Katmanı
Flutter veya Ionic gibi frameworklerle hazırladığımız mobil uygulamamız bu katmanda bulunur. Mobil uygulama web katmanındaki Token ve Generic servis Web API’lerini kullanır.
KVKK ve Kişisel Verileri Koruma Konusunda Öneriler
- Kişisel Veriler ve üyelik için .NET Core Identity kullanmanız tavsiye edilir ve bu kısım için ayrı ve özel bir SQL Server kullanmanız ve projenin kalan kısmını da ayrı genel bir veritabanında tutmanız önerilir.
- Kişisel Verileri post-kuantum algoritmalarla şifreleyerek veritabanına kaydetmelidir.
- ISO 27001 bilgi güvenliğine dikkat edilmeli ve ofiste hiçbir kişisel telefon ve kişisel bilgisayarın Wi-Fi’yi hackleyememesi için ofiste Wi-Fi kullanılmasını önermiyorum. Sadece misafirler için tamamen ayrı bir network ile Wi-Fi sağlanabilir, ancak ofis çalışanları sadece özel olarak korunan kablolu networkü kullanmalılar.
- Yabancı cihazlar ofis bilgisayarlarına ve networküne kesinlikle bağlanamamalıdırlar.