Buradasın
ASP.NET Core'da Repository Katmanı ve Global Kod Yönetimi Eğitimi
youtube.com/watch?v=CTtj7NJO5jMYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir yazılım geliştiricisinin ASP.NET Core uygulamalarında repository katmanı kullanımı ve global kod yönetimi hakkında sunduğu kapsamlı bir eğitim içeriğidir.
- Video, gerçek hayatta karşılaşılan iki sorunun global çözümüyle başlayıp, repository katmanının nasıl oluşturulup kullanılacağını adım adım göstermektedir. İçerikte entity'lerden türetilen model sınıflarının yönetimi, interface'lerin kullanımı, DB First yaklaşımı, Automapper ile database'e gitme, expire kontrolü, strateji dizayn pattern kullanımı, güncelleme işlemleri ve şifreli alanlar için encrption işlemleri gibi konular ele alınmaktadır.
- Eğitim, repository katmanında ruhları çalıştırma, transaction açma ve bitirme süreçlerini de içermektedir. Ayrıca, uygulamanın çalıştırılması ve breakpointlerle kodun adım adım incelenmesi ile video sonlanmaktadır. Video, uygulamanın global kod akışını nasıl düzenlediği ve servis katmanında global kodların nasıl yönetilebileceği konusunda detaylı örnekler sunmaktadır.
- 00:10Giriş ve Video Amacı
- Video, gerçek hayatta başımıza gelebilecek iki sorunu global bir yolla çözmeye çalışacak.
- Global çözüm, yazılan kodların projenin birçok farklı yerinde kullanılabilmesine olanak sağlayacak.
- Konuşmacı, video çekim sürecinde yaşadığı sorunları ve kodları tekrar gözden geçirdiğini belirtiyor.
- 01:20Kayıt Güncelleme Sorunu
- İlk konu, bir kaydı üzerimize aldığımızda başkası tarafından güncellenmesini sağlamak.
- Klasik yöntem, bir update işlemi yaparak mod eğitim bakılmasıdır.
- Mod eğitim bakılması, kaydı alıp modda eğitimini alıp, güncelleme yapmadan önce dibideki modda kontrol ederek aynı değilse güncellemeyi engellemektir.
- 02:17Repository Katmanı Kullanımı
- Konuşmacı, e-posteri katmanında değil servis katmanı ile bu işin çözülebileceğini belirtiyor.
- Repository katmanı, projenin büyüklüğüne ve yapılan işe göre gerekli olabilir.
- İkinci yaklaşım, hatalı bir yöntemdir çünkü blok tablosu kullanarak performans kaybına neden olur.
- 03:39Alternatif Yaklaşım
- İkinci yaklaşım yerine, open ve open yüz lira gibi alanlar açılarak çözüm bulunabilir.
- Bu alanlar, editleme işleminin yapılacağı ve sürekli değişebileceği tablolara konulabilir.
- Open statüs sıfırsa kayıt açık durumda, bir ise birisi üzerine almış demektir.
- 05:07Soket Kullanımı ve Listeleme Mantığı
- Soket kullanılmadığında, bir kişi kaydı üzerine aldığında diğer kişilerin formu doldurması boşa gidebilir.
- Listelenme mantığında, open statüsü sıfırsa edit butonu gizlenmelidir.
- Soket kullanılmazsa, en son çek kontrolüne denk kalsa muhabbet kontrolüne kalınır.
- 06:55Kod Çözümü
- Proje kodları makalede paylaşılacak ancak git olarak verilemeyecek.
- Kaydı aldığımızda change action open statüs servisini kontrol ediyoruz.
- Servis katmanında action kontrolü yapılıyor ve servise gönderiliyor.
- 07:42Global Servis Kullanımı
- Servisle ilgili kolu her yerde yazmamak için alternatif yollar vardır.
- Statüs operation adında ayrı bir servis oluşturulabilir.
- Bu servis, global bir şekilde modda dönmekte ve en son güncellendikten sonraki zamanı geri döndürmektedir.
- 08:42Servis İşlemi Detayları
- Servis, önce kişinin üzerinde kayıtlar var mı diye bakıyor ve varsa onları temizliyor.
- İlgili alanı database'den çekip, başka biri almış mı diye kontrol ediyor.
- Eğer başkası üzerine almışsa false dönüyor, update işlemini gerçekleştirip modda data bezden gidip bir daha kaydı çekiyor.
- 11:00Repository Katmanı ve Interface Kullanımı
- Repository katmanında entity işlemleri (get, kaydetme) gerçekleştiriliyor ve bu işlemler interface üzerinden yönetiliyor.
- Repository katmanında gelen modelin IExpire interface'inden türemiş olup olmadığı kontrol ediliyor ve bu durumda belirli alanlar set ediliyor.
- DB First yaklaşımı kullanılarak entityler veritabanından oluşturulmuş ve bu entityler interface'lerden türetilerek kullanılıyor.
- 14:35Repository Katmanının Çalışma Prensibi
- Repository katmanında yapılan işlemler, servis katmanında kullanılan tüm servislerde aynı şekilde uygulanıyor.
- Repository katmanında hangi entity'den türeyecekse o repository kullanılıyor ve bu repository otomatik olarak atanıyor.
- Repository katmanında entity döndürülüyor ve kayıtlar üzerinde işlemler gerçekleştiriliyor.
- 17:10Rule Sistemi ve Global Yönetimi
- Kayıtlar üzerinde çalıştırılacak kurallar (rule) var ve bu kurallar global olarak yönetilmeli.
- Security Action Rule adında bir interface oluşturulup, tüm rule'lar bu interface'den türetiliyor.
- Rule'lar execute rule metodu üzerinden çalıştırılıyor ve yeni rule'lar eklendiğinde kod değiştirilmeden çalıştırılabiliyor.
- 21:21Repository Kullanımı ve Expire Kontrolü
- Automapper ile database'e gidilecek işlemler repository kullanılarak kaydediliyor.
- Global bir extension yazarak expire kontrolü yapıldı, bu extension expire interface'ine yazıldı.
- Eğer bir kayıt üzerinde beş dakika geçtiyse, süresi geçmiş olan kayıtlar temizleniyor.
- 22:58Strateji Design Pattern
- Bu tür kontroller için strateji design pattern kullanılıyor.
- Bir interface tüketiliyor ve ortak metot sürekli çağrılıyor.
- Kayıt üzerinde işlem yapıldığında, kaydetme durumunda mod tarihlerine bakılıyor.
- 24:26Kayıt Güncelleme İşlemi
- Güncellenecek kayıt ve database'den çekilen model karşılaştırılıyor.
- Eğer gelen kayıt expire'tan türemişse ve gönderilen model ile database'den çekilen modeldeki moddateler birbirinden farklıysa hata fırlatılıyor.
- Solution'ın her yerinde repo kullanılıyor ve insert elastik search yapılıyor.
- 26:19Encryption İşlemi
- Bazı tablolarda kolonları encrypt olarak işaretliyor.
- View'dan gelen açık olarak gelen kolonları, dataları, propertileri encrypted işaretli olanları şifreleme işlemi yapılıyor.
- Repository katmanında update kullanıldığında, ilgili field'ı bulup kendisi şifreliyor.
- 28:08Repository ve Servis Katmanı Kullanımı
- Repository katmanı veya başka bir servise injection yapılabilir.
- Ruhlar (ruhlar) bir interface'den strateji design pattern yapıp kontrolü dolduruluyor.
- Servis katmanı da bu kontrolleri yapıyor çünkü ruhlar business ve entity özeldir.
- 28:48Repository Kullanımının Önemi
- Repository katmanı kullanılmadan servis katmanı direkt DB context kullanarak save işlemi yapılabiliyor.
- Repository katmanına gömülen global business kodları sayesinde bu yerler rahatlatılmış oluyor.
- Repository kullanılan yerlerde reposter pattern kullanılmalı, aksi takdirde global kod akışı bozulabilir.
- 29:31Uygulama Testi
- Uygulama çalıştırıldığında, beş dakika geçen kayıtların hepsi temizlendiği görülüyor.
- Kayıt üzerinde değişiklik yapıldığında, kaydetme işlemi sırasında update işlemi yapılıyor.
- Repository katmanında update işlemi yapıldıktan sonra, kayıt güncelleniyor ve status değeri değiştiriliyor.
- 31:54Kayıt Güncelleme ve Ruhlar
- Update işlemi gerçekleştirildiğinde, DB Security Action ile türetilen entity'lerin expire zamanları aynı olarak görünüyor.
- Transaction açıldığında, ne zaman devreye gireceği durumu kontrol ediliyor ve iş tamamlandıktan sonra transaction bitiriliyor.
- Kayıt güncellendiğinde, ruhlar tekrar çalıştırılıyor çünkü business setinde ruhlar önemli bir konu.
- 33:25Özel Durumlar ve Kapanış
- Eğer bir kayıt üzerinde işlem yapılmışsa, ruhlar farklı bir şekilde çalışıyor.
- Kayıt güncellendiğinde laklama işlemi kaldırıldığı için ruhlar tekrar çalıştırılıyor.
- Video, repo katmanında yapılan değişikliklerin elastik search'e nasıl aktarıldığı hakkında bilgi veriyor ve izleyicilere fikir açmayı amaçlıyor.