#5- Asp.NET Core 6 + Angular İle Mini E-Ticaret | Generic Repository Design Pattern
HTML-код
- Опубликовано: 4 фев 2025
- Github : github.com/gnc... #aspnetcore6 #angular #eticaret #aspnetcoreuygulama #onionarchitecture
Bu video Gençay Yıldız tarafından NGAkademi bünyesinde ücretsiz çekilmiştir.
Gençay Yıldız'ın Bloğu
www.gencayyild...
Güncel Duyuru ve Bildiriler İçin Sosyal Medya Hesaplarımız
/ ngakademi.sosyal
/ ngakademi
/ ngakademii
Bana destek olmak için kanalıma üye olabilirsiniz:
/ gençay yıldız
Hocam, bu kadar ileri seviye konular için böylesine sağlam, detaylı ve anlaşılır bir kaynak olduğunuz için Allah sizden razı olsun.
inşAllah Ramazan ayında da bu seri devam ediyor olur ve sahura kadar videolarınızdaki derin bilgilerden nasiplenmiş oluruz.
Kesinlikle seviye olarak zirvelerde olacak bir eğitim serisi gibi görünüyor.
Bu harika seriden sonra Design Pattern'ler konusundaki eğitim videolarınızı da beklemedeyiz.
Emeklerinize sağlık.
Türk yazılımcılar için bir nimetsiniz hocam
IRead ve IWrite repository sini daha önce hiç bir repoda görmemiştim. Ufkumu açtınız valla teşekkürler
CQRS işte)
Hocam gerçekten de Allah sizden razı olsun. Yani kelimelerle anlatmak gerçekten çok zor, bunu da sizi övmek için falan söylemiyorum ama ciddi bir hizmet. Şu kadarını söyleyeyim; sizin derslerinizden sonra bir yerlere gelen ya da gelecek olan arkadaşların hepsinin üzerinde çok büyük haklarınız var. Derler ya, bi anne-babanın eli öpülür bi de hocanın. İşte siz eli öpülesi bir hocasınız... Çok teşekkür ederizzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.
Bu arada sizin, ailenizin, sevdiklerinizin ve sizi takip eden tüm arkadaşlarımızın Ramazan Bayramı Mübarek olsun...
Dersler o kadar çok sarıyor ki teşekkür etmeyi unutuyorum. Ayrıca dün CQRS'i araştırıp kendi projemde MediatR kullanmıştım, ilk aklıma gelen query ile commandı, sizin deyişinizle write ve read'i ayırmak oldu. Repository Pattern'ı hiç uygulamamıştım, böyle uygulayınca gerçekten çok güzel oldu. Teşekkürler canım hocam.
Gençay Hocam RUclips da kolay kolay yorum yapmam hakikaten çok güzel içerikler oluşturuyorsunuz. Olayın mantığı gerçekten oturuyor. Teşekkür ederim emeğinize sağlık.
Teşekkür ederim, bol faydalar dilerim.
Teşekkürler.
Hocam ağzınıza sağlık o kadar anlaşılır bir anlatımınız var ki dersler çok akıcı ve hızlı geçiyor.
Adamin hammaddesisiniz hocam emeğinize sağlık videolarınızı izleyip de sıkılmak veya anlamamak mümkün değil
Bu ders o kadar yoğun bi içeriğe sahip ki, izledikten sonra beyninizi hissetmeyeceksiniz :D
Hocam tek kelimeyle kral bir adamsınız. Anladığımı hissedebiliyorum sonunda eğitim için teşekkür ederim :)
Çok detaylı anlatıyorsun. Kralsın
Günün özlü sözü: Aklın yolu birdir. Yazılım da akla uygun bir alan. Kodun akla uygun olmayınca kodu düzeltiyorsun, aklın koda uygun olmayınca aklın düzeliyor :) 50:00
Bilader sen normal bi eğitimci değilsin fazlasısın... abone olup beğeniyi yapıştırdık..
Bu derslerin değeri ancak 3-5 yıl sonra anlaşılır.
haklısınız. şuanda atılan her yorumun yanında 2 yıl önce yazıyor ama bilgiler hala çok güncel. Umarım bu videoları herkes izler ve hocamız böyle kapsamlı projeler yapmaya devam eder.
EMEĞİNİZE SAĞLIK HOCAM..........
Çok güzel bir çalışma olmuş. Bir de flutter uygulaması bekliyoruz, bu projenin devamı şeklinde de olabilir.
read ve write diye ayırmak bize fazla kalabalık getirdi gibi hocam. elinize sağlık
1.23 de olan hata controllerin Task olmamasından kaynaklanıyor. Controllerin void dönüş tipindeyken repository beklemiyor o yüzden ekleme işlemi yapmadan repository i dispose ediyor.
Elinize sağlık.
Olabilir, göz atacağım.
Ali Ateş, haklısın kardeşim. Sonraki videolarda bu probleme değinecek ve ismen teşekkür edeceğim.
@ Rica ederim. Videolar için asıl ben teşekkür ederim.
çözüm ne peki?
@@furkanaydn588 Merhaba, daha önce buna benzer bir sorun yaşamıştım.
ORM'ler zaten repository ve unit of work patternlerini implement ediyor. Ef için konuşacak okursak DbContext'i unit of work ve DbSet'i repository olarak düşünebiliriz. Eğer proje de sadece ef kullanılacaksa ve ilerleyen zamanlar dapper gibi yapılara geçme ihtimali yoksa repository vs kullanmaya gerek yok. Fakat bu ihtimaller varsa o zaman repository pattern kullanılmalı yoksa direk ef ye bağımlı olursunuz ve dapper a geçince tüm ef kodlarını silmek zorunda kalırsınız. Bu da solid e ve özellikle open-closed principle'ye aykırı.
repository pattern yerine ne kullana biliriz bir onerin varmi?
Merhaba hocam,
Async özelliği olmayan metotlar için
await Task.Run(() => Table.Update(data));
await Task.Run(() => Table.Remove(model));
şeklinde kullanılabilinir.
Çok iyi gidiyor. Teşekkür ediyorum tekrardan.
Agzinize saglik hocam. Ben, sizin bahsettiginiz 1:15:50 deki Controller deki Contructor Injection Hell olayini, ortak DI lari BaseController da toplayarak cözüyorum. Ancak yine bazi controller lar üzerinden ortaklarin disinda 10 a yakin injection olabiliyor. Bu da can sıkıcı bir hal alabiliyor. Sizin cözümlerinizi merakla bekliyorum. Selamlar
Hocam parliament sevdiğini öğrendikten sonra gidip parliament aldım aşırı iyi hala beyaz paket olanından , makedonyada yaşıyorum ilerde ankaraya gelince sana da eski günlerini yaadetmen için bir paket getiriceğim :)
Sigarayı 2018'de bıraktım. Eğer ki gerçekten eski günlerdeki parliament'i getirirsen, geldiğin gün sigaraya başladığım gün olur :)
Faydalı bir bölümdü, teşekkürler hocam.
Hocam video çekerken bile hazırlanıp gömlek vs şık oluyosunuz dikaktimi çekti ben olsam şort atlet olurdum 😂 teşekkürler emeğiniz için..
🤣
I come from Vietnam. I completed the lesson 4/27/2024
49:40 await Task.Run(() => { Table.Remove(entity); }); async olur
Emeğinize sağlık Hocam
Bir de hocam CQRS ile anlatsanız tadından yenmez....
hocam ellerinize emeklerinize saglık gercekten ben böyle bir öğretim tarzı görmedim maşallah hocam size bu arada hocam twitch ya da başka bir platformdan yayın acıp kodlama,yazılım gibi şeyleri canlı yayın sırasında yapsak nasıl bir fikir olur sizce hem maddi olarak biraz getiri saglarsınız hem de o güzel bilgilerinizi bizlere aktarırsınız projeler yapıp beraber tartışabiliriz bu projeler hakkında bu yorumumua cevap verirseniz çok mutlu olurum fikirlerinizi merak ediyorum çünkü teşekkürler iyi çalışmalar dilerim.
Hocam o kadar iyisiniz ki anlatımda 2 kere yorum sildirdiniz 😂 Repository Patern ile ilgili.
Orkestra şefi && extraordinary
teşekkür ederiz. emeklerinize.
Teşekkür ederim, hocam!
1:14:14 AUTOFAC niye kullanmıyoz :D
11.11.2022 Uygulamalı izledim. #5- Asp.NET Core 6 + Angular İle Mini E-Ticaret | Generic Repository Design Pattern
elinize sağlık
AddSingleton değişikliği yapmadan sadece CreatedTime'a yazacağımız değeri now yerine UtcNow yapınca sorun çözüldü.
Emeğinize sağlık.
kral yemin ediyom mukemmelsin
ayrıca sondaki sorunu addscop ile ıaction result liste cevirince sorun cozuluyor farklı olarak :)
Bana daha acik sekilde aciklaya bilirmisin rica etsem?
@@vusalmammadli712 void ile get arasına ıactionresult eklemek gerekli veri dönmesi için yanlış hatırlamıyorsam addsingleton olan yerlerde addscoop olmak zorunda bir sonraki videoda açıklaması yapılıyordu sanırsam
Teşekkürler
Repository pattern çok fazla classı mevcut. O yapıyı ben 3 class a indirdim. Daha optimize daha az iş yükü var sırtımda.
merhabalar öncelikle emekleriniz için teşekekkürler Gençay Hocam bu projeye unit of work UoW de entegre edileceğinden bahsetmiştiniz, ilerleyen videolarda Ekleyecek misiniz? Saygılarımla,
Hocam 43:41 deki konuda id ye göre filtre yaparken ararken Ef nin find metodu var id parametresi alıyor onu kullansak olmaz mıydı? Arasındaki fark nedir?
Evet o daha iyi olur. Uykusuzluktan unutmuşum.
@ Hakkınız ödenmez hocam çok teşekkür ediyorum. BaseEntity olayını da öğrenmiş olduk.
Mehmet Bey, nasıl yapılıyor bu dediğiniz?
@@mcecab _context.Set().Find(id);
Teşekkürler hocam
12:55'te install package deyip öneren eklenti nedir hocam? Bende çıkmıyor
isimlendirme önerisi ICrudRepository , IQueryRepository
Hocam 55:33 de EntityEntry nesnesini oluştururken diğer metodlarda yaptığımızın aksine T tipi belirtmedik. Sebebini anlayamadım bilinçli olarak mı bu şekilde yaptık, öyle yaptıysak sebebi nedir ?
Hocam cehaletimi hoş görürseniz size bir soru soracağım. BaseEntity sınıfına bir IBaseEntity interface i implement edersek onunda propertysi oluşturduğunuz classla aynı olacak; Repositorylerdeki T yi where T:IBaseEntity yapsak bu da çalışırmı? Yada kurduğum mantık yanlışsa niye yanlış? Henüz videonun 41. dakikasındayım
Hocam selamlar, Bir önceki migration vidyonuzda foreignkeyler gözükmüyordu ama entitylere eklemiştiniz simdide, customerId olmadan yolladınız productları. acaba sonradan sildiniz mi onu ben foreign key ile yolluyorum null olabilir yapıp cözdüm simdilik o key sorununu. Sizin postgrede sutunlarda göremedim customerId yi
Hocam öncelikle emeğinize sağlık. Çok güzel bir anlatım ve kalite var videolarınızda. Hakkınız ödenmez.
Kafama takılan bir konu hakkında fikrinizi almak isterim.
IRepository sınıfına DbSet eklediğimiz anda proje tamamiyle EFCore'a bağımlı olmuyor mu? Hatta sırf bu yüzden Application katmanına EFCore'u eklemek zorunda kalıyoruz.
Örneğin MongoDB ile çalışmak istersek IRepository#Table property'sini nasıl implemente edeceğiz? Bu noktada repository pattern'in en büyük avantajı ortadan kalkmıyor mu?
Evet, haklısınız.
Hocam Controlleri da ProductsCrudController, ProductsQueryController yapsak nasıl olur?
Hocam Genel olarak generic repository yaptıkdan sonra IoC yapılanmasından bu generic şeklinde bir nesne istesek. controller içerisindeki injection yapılan nesneye tipini verdikten sonra içeride kullansak. Daha az kod yazarak aynı işlemi yapmış olmazmıyız. Ana bir interface ve oradan türeyen concrete sınıflarından sonra her bir entity türü için bir daha yazmak gereksiz kalmıyor mu? Genericliğe aykırı gibi duruyor. Acaba onu yapmaksak kaybediceğimiz durumlar mı var?
Hocam dakika 55 de söylediklerinize yönelik ; WriteRepository classında ReadRepository classından bir nesne türetip silinecek nesneyi ReadRepository classının GetByIdAsync metodu ile bulmak ne kadar doğru ve mantıklıdır ?
ağzınıza sağlık. getwhere fonksiyonunu kllanarak getirdiğimiz tablonun ilişkili olduğu tabloların verilerini de getiriyor mu getirmiyorsa daha hızlı getirmesini nasıl sağlarız bunun için ayrı bir methot tanımlasak olur mu.
Optimizeler yapacağız.
Mesut bey include ve select iceriden cekilen ilişkili tablolara sorgu atilabiliyor eğer orm yapiniz doğru ise hatta ıqueryable yapisi içinden bile atilabiliyor
Eksik paket yüklemeleri için Visual Studio otomatik önerme yapmıyor. Bu sorun bi tek bende mi var? Biraz araştırdım ama çözüm bulamadım
Hocam merhaba. Öncelikle emeğinize sağlık. Şöyle bir sorum olucaktı; IRepository interface-in kullandığı DbSet bizi EFCore-a bağımlı hale getirmiyormu?. Eğer ilk başta EFCore-a bağımlı olacaksa proje direkt olarak DbContext sınıfını kullanmak daha karlı olmazmı? İleriki videoları izlemedim henüz lakin, şu anki yapının Repository design pattern-in avantajını ortadan kaldırdığını düşünüyorum. Düşünceleriniz nelerdir? Tekrardan emeğinize sağlık.
59:45
Hocam selamlar. IReadRespository ve IWriteRepository interfaceleri out T ve in T olarak ayirsak boylece o kisimlara da bir sinirlama getirsek olur muydu? Write islemlerinde geri donus yapmayacaginizi varsaydim tabiki.
Hocam 50-100 arası tablom olduğunu varsayarsak , bu yaklaşımdaki gibi her bir tablo için 4 adet dosya oluşturmak göz korkutuyor. 50 tablo için Her bir Entity e özel interface ve concrete oluşturmak demek 200 dosya eder.
Bu yöntemde bu kadar dosya açmadan başka bir yol var mıdır acaba?
Birbirleriyle alakalı entitylerin bir bütünlük oluşturabilmesi, tutarlı olabilmesi ve iş kurallarını ya da akışlarını gerçekleştirebilmesi için bir arada kullanılmasını ifade eden Aggregate Root class'larına özel repository'leri sınıflarınızı oluşturabilir ve lüzumsuz maliyetlerden kodu/projeyi arındırabilirsiniz.
Bu konuya dair şu makalemi incelemenizi öneririm: www.gencayyildiz.com/blog/domain-driven-design-stratejik-ve-taktiksel-olarak-derinlemesine-inceleme/
quá hay, dễ hiểu
Agziniza sağlık hicam ve bisey sormak istiyorum ben repository desing patterni unit of work paterni ile kullaniyorum simdi hem read hemde write unit of work u olusturmaliyim doğrusu nedir
Hocam selamla lütfen cevaplar mısınız. Bu eğitim öncesine entitu framewotk çalışmalı mıyız temelde çok az biliyoruz eğitime ona göre başlamak istiyorum
Yani temellerini ve Code First yaklaşımını bilmek yeterli.
Hocam merhaba.
public DbSet Table => _context.Set();
yazdığımız satırda context.set kısmının ne işe yaradığını biliyorum ancak => lambda expression unun buradaki işlevi nedir anlayamadım. Table property' sinin içerisine _context.Set(); den döneni setlemeye mi yarıyor acaba ?
Merhabalar. Bu güzel ve detaylı anlatımınız için teşekkürlər hocam. Şöyle bir sorum vardı- Her bir entitynin İd sini GUİD olarak tutmaya biliriz. Birinin İD si identity olarak kalmasi gereke bilir. Bu zaman GetByİd() methodunda nasil bir uyqulama gerçekleştire biliriz?
2 ayri BaseEntity yaratsak zaten Constraint e 2 class aynı anda veremiyoruz,
'... Birinin İD si identity olarak kalması gereken bilir ...' cümlenizdeki identityden kastınız nedir?
@ integer typedan ola bilir misal. Identity den kastimda sirali olaraq 1-1 artmasidir.
Yani: bir Entitinin Id-si Guid type-dan olarken diğer bir entitinin Id-si integer type yapa bilmek icin nasıl bir değişilik yapa biliriz.
overload edilebilir
hocam internette aktifmisiniz suab
47:20 de kaldım.
Hocam merhaba,
Ben veritabanı kısmında MSSQL kullanıyorum. Veriler veritabanına eklenirken koddaki sıra ile eklenmedi. Sizde 2-1-3 sırasıyla, bende 3-2-1 sırasıyla eklendi. Tam nedeni nedir acaba?
System.InvalidOperationException: Unable to resolve service for type 'ETicaretAPI.Application.Repositories.IProductWriteRepository' while attempting to activate 'ETicaretAPI.API.Controllers.ProductsController'.
Hatasi aliyorum swaggerde execute dedigimde hocam cok baktim ama bulamadim birebir ayni yazdigim halde boyle bir sorun aliyorum nasil duzeltebilirim ?
ServiceRegistration ı kontrol edin yanlış bir bağ kurmuş olabilirsiniz.
hocam bu IReadRepository icerisin de expression func t bool method kodlarını yazdık amacta customize etmek okey bunda sorun yok lakin biz bunu ornek veriyorum ardalis librarysını kullanarak specification yazarak istedigimiz sekilde getirtebiliriz o sorguları neden bunu bir interfacenın ıcın de yapıyoruz anlayamadım
Örnek gösterebilir misiniz?
@ s
Hocam bu arada niçin AutoFac veya Ninject kullanmadık .d
hocam autofac niye kullanmıyoruz :)))
🤣
IoC için diyorsan built in olan şu anda işimizi görüyor. Görmediği kısma kadar ilerler miyiz bilmiyorum ki ilerlersek kullanılırız herhalde.
Hocam bazi kaynaklarda "Repositories should not have Update method" gibi maddeler var ne dusunuyorsunuz bu konuda?
Bence opsiyonel çünkü change tracker'ın track ettiği objeleri 'get' fonksiyonlarıyla elde ettikten sonra update işlemine tabi tutabilirsiniz lakin track edilmeyen objelere update sorguları generate edebilmek için repository içerisinde 'Update' vari bir fonksiyona ihtiyacınız olabilir.
Hocam DbContext ide generic olarak versek olur mu?
videolar sadce bende mi oluyor acaba sürekli ses kesilmesi yaşıyorum
Sadece sende güzel kardeşim.
neden string id? 25:30
id lerimizi tanımlarken int türünden tanımlamadık, id nin veri türü guid içerisinde harf de bulunduruyor
design pattern eğitimi için 5 tl lik katıl aboneliği yeterli mi hocam?
🙃ilgili eğitimler için gerekli seviyelerin ne olduğu oynatma listesine tıklayınca öğrenilebilmekte.
Hocam aklıma takılan bir soru var bu Ahmet kim ? Aranızda alacak verecek meselesi mi var ? Sürekli aklınızda mübarek😁
emektar bilgisayar sen benden daha yorgunsun kusura bakma asasdsfsdfs
.
Hocam merhaba. dakika: 38:29 da yapılan işlemleri yapınca table.where(method) yazdıktan sonra method kısmının altını çiziyor ve hata veriyor. hata mesajı:
Severity Code Description Project File Line Suppression State
Error CS1503 Argument 2: cannot convert from 'EticaretAPI.Application.Repositories.Exception' to 'System.Threading.CancellationToken' EticaretAPI.Persistance C:\Users\T480_Home\Desktop\E-Ticaret Uygulamasi\EticaretAPI\Infrastracture\EticaretAPI.Persistance\Repositories\ReadRepository.cs 32 Active
aradım ama çözemedim yardımcı olursanız sevinirim :)
Hocam ben sırayla izlemeye başladım da videolarınızı videoda dediğiniz Generic repository'e karşı çıkanlar oluyor vesayire... Bende şimdi kuşkuya girdim kurumsalda falan patlamayalım bu design pattern hala kullanılıyor mu ? Çünkü diyelim 100 tane class var 100 class için mi ICustomerRepository,IProductRepository ....... devam edecek mi
System.InvalidOperationException: Unable to resolve service for type 'ETicaret.Application.Repositories.IProductWriteRepository' while attempting to activate 'ETicaret.API.Controllers.ProductsController'.
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ThrowHelperUnableToResolveService(Type type, Type requiredBy)
at lambda_method3(Closure, IServiceProvider, Object[])
at Microsoft.AspNetCore.Mvc.Controllers.ControllerFactoryProvider.c__DisplayClass6_0.g__CreateController|0(ControllerContext controllerContext)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context) bu hatsayı veriyor ders 5
Request sonucunda
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
---> System.InvalidCastException: Cannot write DateTime with Kind=Local to PostgreSQL type 'timestamp with time zone', only UTC is supported. Note that it's not possible to mix DateTimes with different Kinds in an array/range. See the Npgsql.EnableLegacyTimestampBehavior AppContext switch to enable legacy behavior.
şeklinde başlayan uzun bir hatayla karşılaşanlar olursa eğer Persistence altındaki Contexts klasöründe bulunan ECommerceAPIDbContext sınıfının Constructor metoduna aşağıdaki iki satırlık kodu yapıştırarak bu sorunu çözebilir
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
AppContext.SetSwitch("Npgsql.DisableDateTimeInfinityConversions", true);
Teşekkürler.
Teşekkürler hocam, elinize sağlık
Emeginize saglik hocam
Hocam öncelikle emeğinize sağlık.
IRepository sınıfına DbSet eklediğimiz anda proje tamamiyle EFCore'a bağımlı kalmış olmuyor muyuz?
Farklı bir veri tabanı ile çalışmak istersek IRepository#Table property'sini nasıl implemente edeceğiz?
IReadRepository ve IWriteRepository de ctor'da oluşturduğumuz ETicaretDbContext' i veriyoruz. Bu da uygulamaya farklı bir veritabanı eklememizi engellemiş olmuyor mu? Generic olarak DbContext' ten constrain edilmiş bir TContext sınıfı vermemiz daha doğru olmaz mıydı?
Merhaba, hocamız Contexts diye dosya açtı. orda vurguladı farklı Contextler ola bilir diye. Değiştireceğimiz yer çok fazla değil. (Bu sadece bir Yorum, yanıldıysam affola)