2020 Yılı için Katmanlı Mimari Önerisi


.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.

  1. ÇözümAdı.Model Katmanı
    Model katmanı Entity’leri ve Enum’ları içerir. Entity’lerde DataAnnotation’lar kullanılmaz.
  2. Çö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.
  3. Çö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.
  4. Çö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.
  5. Çö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.

  6. ÇözümAdı.Tests Katmanı
    NUnit ile birim testleri yapabileceğimiz katman. Selenium testleri de bu katmanda yazılabilir.
  7. Çö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

  1. 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.
  2. Kişisel Verileri post-kuantum algoritmalarla şifreleyerek veritabanına kaydetmelidir.
  3. 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.
  4. Yabancı cihazlar ofis bilgisayarlarına ve networküne kesinlikle bağlanamamalıdırlar.

Kuantum Yapay Zeka ve Kuantum Kriptoloji


Kurtuluşumuzun aşağıdaki maddelerle ilgili olduğuna inanıyorum:

  1. Çevrecilik / Kanaatimce iklim değişikliklerinin getireceği şiddetli kuraklık dönemiyle karşılaşmadan önce emisyon oranlarını 0’a indirmemiz, atmosferi ve okyanusları temizleme çalışmalarına hız vermemiz gerekiyor. Bu bağlamda dünya genelinde trilyonlarca ağaç dikmemiz gerekiyor.
  2. Kuantum Yapay Zeka / Geleneksel yapay zekaların geliştirilebilmesi için büyük veri gerekiyor. İnternetteki, bilgisayar ve telefonlardaki tüm verileri kullanarak öğrenen yapay zekalar geliştirilse de, kuantum bilgisayarlarla bunlardan daha iyisi, daha hızlısı, daha az veri ile daha yüksek kalite quadratic yapay zeka geliştirimi mümkün hale geliyor.
  3. Kuantum Kriptoloji / Kişisel verileri korumak için “yerel/private” kuantum şifreleme algoritmaları önemli hale geliyor. Mevcut şifreleme algoritmalarının güncellenmesi verilerin güvenliği için gerekli.
  4. Kuantum Programlar / İkilik sistemdeki yazılımlara kuantum programcıklar ilave ederek daha ileri seviye yazılımlar geliştirmemiz gerekiyor. Geçiş sürecinde bu konuyu ihmal etmemek lazım.
  5. Ekonomi ve Ticaret / Merkezde Blockchain olmayan yeni parabirimleri ve bunlarla entegre projeler geliştirmemiz gerekiyor
  6. Uzay ve Bilim / Güneşin bir ömrü olduğu için ışık hızından milyonlarca kat hıza ulaşan spaceship’ler üreterek güneş sistemini terketmemiz nihai hedefimiz olmalıdır. Güneş ve dünyanın, evrene göre çok daha kısa ömürleri vardır, evren henüz gençtir; bu nedenle evrenin başka noktalarında bizi bekleyen cennetlere gitmeyi amaçlamak doğru bir hedef olacaktır.

BQP ve Polinom Hiyerarşisi


Bu günlerde üzerinde durduğum konu, sadece Kuantum Bilgisayar’da encrypt ve decrypt işlemi yapabilen bir kuantum algoritma geliştirebilmek. Ve bunu Dwave kuantum bilgisayarlarında implemente etmek. Geçen yıl bunu yapabilmek için bir matematik dehası olmam gerekiyor sanıyordum. Oysa benim matematiğim kötüdür, bölme işlemini dahi hatırladığımdan emin değilim.

Ancak internette araştırmalar yaparak konuyu daralttım ve odaklanacağım alanı belirledim: PH’ta olmayan BQP problemleri bulmak. Kuantum bilgisayarlar tarafından çözülebilen matematik problemlerine kısaca BQP, geleneksel bilgisayarlar tarafından çözülebilen matematik problemlerine genel olarak PH adı veriliyor.

Hedefimiz geleneksel bilgisayarlar tarafından çözülemeyen sadece Kuantum Bilişim dünyasına ait olan algoritmalar/problemler bulmaktır. Böylece geliştireceğimiz algoritma sadece Kuantum Bilgisayarlarda çalışabilecek. Ve eğer bu yöntemle bir şifreleme geliştirirsek bu şifre sadece kuantum bilgisayarlarca decrypt edilebilecek, tabi decrypt edilebilirse.

Sadece Kuantum Bilgisayar dünyasına ait bir problem bulmuşlar: Oracle ilişki problemi olduğu söyleniyor. Şimdiki meselemiz bu konuyu anlamak.

Oracle İlişki Problemi Nedir?

Konuyu açıklayan makale ve kaynakları paylaşmak istiyorum:

  1. Sonunda sadece Kuantum Bilgisayarın çözebileceği bir problem bulundu: https://www.quantamagazine.org/finally-a-problem-that-only-quantum-computers-will-ever-be-able-to-solve-20180621/
  2. BQP ve Polinom Hiyerarşisi: https://www.scottaaronson.com/papers/bqpph.pdf

Kaynaklarımız var, ancak şahsen ben şu an için anlamakta zorlanıyorum. Bu konuda destekleriniz olursa yorum olarak iletebilirsiniz.