What is DDD | Domain Driven Design

Поделиться
HTML-код
  • Опубликовано: 13 май 2021
  • In this video, I explained both theoretical and practical details about Domain-Driven Design, a technique that has been used frequently in the modern software development world. I have also included the terminology of DDD and the details of what they are used for in this video.
  • НаукаНаука

Комментарии • 106

  • @ucretsiztakipci6612
    @ucretsiztakipci6612 2 года назад +9

    Emeğine sağlık diyip geçmeyin. Belli ki ciddi mesai harcanıyor, ücretli abone olun. İnsanlar şevklensin, kaynak sahibi olsun ki işi devam ettirebilsin.

  • @hizmetbilgisayar525
    @hizmetbilgisayar525 3 года назад +11

    Arkadaş; sen ne kadar çok muhterem bir yazılımcısın güzel bilgiler paylaşıyorsun. Bilgine güç eline sağlık ne güzel emek bu videolar. Birde alttaki yorumlardaki sorulara hızlı cevap vermen takdire şayan.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Çok teşekkür ederim güzel yorumlarınız için. 😊

  • @farukakpnar2265
    @farukakpnar2265 11 дней назад +1

    Hoş bulduk

  • @WaffenVerband
    @WaffenVerband Год назад +2

    Hocam kanalınız o kadar mükemmel ki gerçekten bu kadar geç keşfettiğim için üzülüyorum Teşekkür ederim

  • @TheRaistland
    @TheRaistland 2 года назад +2

    Gerçekten anlattıklarınız çok kıymetli bilgiler. Sayenizde makalelerde okuduğumuz şeyler somutlaşıyor. Uygulanabilir oluyor. Emeğiniz için gerçekten teşekkür ederim.
    Kanalın üyelerinin zaten çoğunluğu katılmış yorum yapanlardan gördüğüm.
    İlk defa bi kanala üye oldum ben de. Etrafında güzel bir yazılım topluluğu oluşuyor ne güzel.

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +2

      Çok teşekkür ederim. Umarım güzel bir topluluk oluşturabiliriz

  • @chunfai6925
    @chunfai6925 2 года назад +3

    Sizi yeni keşfettim. Harika içerikler mevcut. Mükemmel ötesi. emeğinize sağlık

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Teşekkür ederim, iyi seyirler

  • @eminucar1
    @eminucar1 2 года назад +2

    Hocam çok kıymetli işler yapıyorsunuz. Elinize sağlık.

  • @aog.tr.6828
    @aog.tr.6828 Год назад +2

    Teşekkürler. Çok başarılı bir anlatım olmuş.

  • @muhammeda1426
    @muhammeda1426 2 года назад +5

    Hocam seni yeni keşfettim. Hafta sonu da Beşiktaş'ta toplanıyormuşsunuz. İstanbul dışındakilerin gözü yaşlı :(

  • @ozlemaslann
    @ozlemaslann Год назад +1

    Güzel anlatım olmuş hocam teşekkürler.

  • @lutfullahozturk6889
    @lutfullahozturk6889 Год назад +1

    Elinize sağlık hocam.

  • @ahmetbcakici
    @ahmetbcakici 2 года назад +3

    Emeginize saglik cok guzel ve degerli bir icerik olmus 💯

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +1

      Teşekkür ederim. İyi seyirler.

  • @taner-saydam
    @taner-saydam Год назад +1

    Eğitim için teşekkürler hocam.

  • @kaanacar8340
    @kaanacar8340 3 года назад +4

    Gerçekten fark yaratıyor ve çok kaliteli içerik üretiyorsunuz. DDD anlatan bir çok video var ama genelde anlaşılabilir olmuyor ya da çok uç örnekler veriliyor. Micro service video serinizde bu videonun devamını sabırsızlıkla bekliyor olacağım. İyi Çalışmalar.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +2

      Güzel yorumlarınız için teşekkür ederim, umarım video faydalı olmuştur.

  • @maydinunlu
    @maydinunlu Год назад +5

    Ubiquitous Language'ın ne kadar önemli bir konu olduğunu size şöyle bir örnek ile anlatayım. Yıllar önce yeni çalışmaya başladığım bir oyun projesinde işveren sürekli "dataları ve data altyapılarını iyileştirmemiz gerekiyor" gibi söylemlerde bulunuyordu. Projenin dataları da gerçekten çok saçma bir şekilde tutuluyordu. Refactoring sürecine data katmanından başladım ve gayet de iyi oldu. Günün sonunda benim yapacağım işler zaten yapılacaktı bir kayıp yoktu fakat işverenin data dediği şey; 3rd party analitik servislerine (firebase, game analytics vs.) oyunun metriklerini ölçmek için gönderdiğimiz parametrelermiş. Yazılım geliştirmenin iletişime dayalı sosyal bir süreç olduğunu unutmamak lazım :)

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      Kesinlikle haklısınız. Çok güzel bir örnek :)

    • @kritikyorumer
      @kritikyorumer 2 месяца назад

      Sarsıldım

  • @muhammedmustafavanl9463
    @muhammedmustafavanl9463 2 года назад +2

    2 ay önce gelip yorum yapmıştım şimdi tekrar izledim ve sonunda anlamaya başladım bazı teknikleri :D

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Bu yaklaşımdaki yöntemler bu zamana kadar öğrendiklerimizden biraz farklı olduğu için alışmanın zaman alması gayet normal :-)

  • @muhammedmustafavanl9463
    @muhammedmustafavanl9463 2 года назад +1

    Like attım abonede oldum sağolun teşekkür ederim!

  • @med4610
    @med4610 Год назад +3

    hocam senin anlattığın videolar niyeyse tak oturuyor başkalarını izlediğimde kafa karışıyor...tebrik ederim sizi

    • @TechBuddyTR
      @TechBuddyTR  Год назад +1

      Teşekkür ederim :)

    • @med4610
      @med4610 Год назад

      @@TechBuddyTR sevgili hocam...mikroservis eğitiminiz gayet güzel ve anlaşılır...Burada benim kavrayamadığım eğitimin dışında bir nokta var malesef. Oda dağıtık bir mimari yapısında örneğin bazı stok hareketlerinin farklı servislerde ve farklı mongo kullandımn ben mongodb de tutuyorum...api tarafında bir bilgi istediğimde bu bilgilerin bir kısmı 1 numaralı hareket microservisinde bir kısmıda 2 numaralı hatta 3 numaralı microserviste. Dolayısıyla ui tarafında bu bilgiyi gönderebilmem için 3 farklı microservisten bilgileri taşıyıp birleştirip göndermem gerekecek burada nasıl bir teknik kullanılması gerekli. Bu konuda cahilim...microservis video eğitiminize bu konu ile ilgili bir çalışma ekleyebilirseniz inanılmaz aydınlanmış olacağım veya olacağız. Saygılarımla iyi çalışmalar

  • @_mehmet
    @_mehmet 2 года назад +2

    Hocam sizi Onion Architecture yi araştırırken keşfettim. Harikasınız.

  • @AhmetYigiter
    @AhmetYigiter 3 года назад +3

    Fark yaratıyorsun 👏

  • @babakhatamlou7788
    @babakhatamlou7788 Год назад +1

    Harika

  • @mehmetmayti
    @mehmetmayti Год назад +1

    Teşekkürler

  • @biproberkay
    @biproberkay 2 года назад +5

    entity: bir (identity)e sahip, yani id (property)sine sahip (class)lar 7:45
    value object : (identity)e ihtiyacı olmayan 8:30
    aggragate root : 9:20

    • @biproberkay
      @biproberkay 2 года назад +1

      (IAggragateRoot)ta ne vardi 10:30 mantığı
      20:30 markup interface (interface)in içi boş sırf işaretlemek için IAggregateRoot kullanılıyor şimdilik

    • @biproberkay
      @biproberkay 2 года назад +1

      31:35 generate const

  • @utkuozkan6238
    @utkuozkan6238 3 года назад +2

    hocam elinize sağlık

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      Umarım faydalı olmuştur 😊

  • @saynmail6927
    @saynmail6927 Год назад

    Teşekkürler hocam...

  • @Imploser
    @Imploser 3 года назад +3

    DDD; n-tier, onion yada hexagonal gibi katman yapılarını dayatmaz. Daha core seviye olan domain katmanını nasıl tasarlayacağınızı anlatır. Burada hangi mimariyi kullanacağınız size kalmış.

  • @kadirkurhan
    @kadirkurhan 2 года назад +1

    elinize sağlık

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Teşekkür ederim. İyi seyirler.

  • @alifurkangokce9852
    @alifurkangokce9852 3 года назад +2

    Emeğine sağlık

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Umarım faydalı olmuştur 😊

  • @futurexjam2
    @futurexjam2 9 месяцев назад

    Merhabalar, kalıcı bir çözüm hiçbir zaman olamaz ama daha esnek bir çözüm mümkündür ama her şey eninde sonunda eskir ve ayak uyduramaz.O yüzdem BPM ya da workflow yaklaşımlarıyla harmanlanmış, gelişmiş arayüzü olan çözümler çok daha esnek kullanım sağlar. Tabiki bu yaklaşımlarda DDD ne kadar uygulanabilir tartışılır.

  • @muratistipliler9867
    @muratistipliler9867 Год назад

    Hocam cok bilgilendirici bir video olmus, cok tesekkurler. Benim sormak istedigim, OrderModels'teki Order'in constructorunda business logic kullanmak bir anti pattern olusturur mu?

    • @TechBuddyTR
      @TechBuddyTR  Год назад +1

      Ddd de oluşturmaz :) ama çok fazla kural olacaksa bir domain servis oluşturulup o kullanılabilir

    • @muratistipliler9867
      @muratistipliler9867 Год назад

      @@TechBuddyTR Cok tesekkurler.

    • @furkanbekereci1077
      @furkanbekereci1077 Год назад

      ​@@TechBuddyTR Hocam merhaba. Yanlışsam düzeltin lütfen ama kafamı kurcalayan bir şey var. Order bir entity'i yani veri tabanındaki bir tabloya denk geliyorsa, bu class'ın sadece veri tutması görevi gerekmiyor mu? Yani en ufak bir if bloğu dahi olsa yazılan "iş kuralı" SOLID'in S'si ile ters düşmüş olmuyor mu? Eğer DDD bize işlemlerin AggregateRoot'lar içinde yapılmasını zorunlu kılıyorsa bunu muhakkak, bir kaç ufak iş kuralı dahi olsa servislerle beslememiz gerekmez mi? Ya da generic bir AggreageRootService where T : IAggreagateRoot gibi bir markup service interface düşüncesi ile iş kurallarının ApplicationLayer'a taşınması abes mi olur? Açıkçası hem data tutup hem iş akışına katkıda bulunan bir classın SingleResponsibility'ye aykırı olduğunu düşünüyorum. Ha DDD SOLID'i savunmuyorsa ona bir itirazım yok :)

  • @Imploser
    @Imploser 3 года назад +4

    Value Object tanımını tekrar gözden geçirmelisiniz. Value Object bir data transfer objesi değildir. Bu konuda kafa karışıklığı özellikle Java dünyasında hakim olmuş, immutability eşittir value object mantığıyla bakılmış. Data transfer objelerini immutable yapmayı tercih edebilirsiniz ama bu tam anlamıyla bir value object olduğu anlamına gelmez. Bu konuyla alakalı Martin Fowler'ın Value Object makalesini okuyabilirsiniz. Kendisi şöyle ifade ediyor: One source of terminological confusion is that around the turn of the century some J2EE literature used "value object" for Data Transfer Object. That usage has mostly disappeared by now, but you might run into it.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      Yorumumunuz için teşekkür ederim ancak veri taşıdığımız obje dememin sebebi efcore ile birlikte bu objeyi Order içerisinde ayrı bir class gibi düşünüp ama veritabanında ise aynı tabloda farklı alanlarda saklayacak olmamız. Efcore içerisindeki OwnedType olarak tanımladığımız zaman tam olarak bu işi yapacak

    • @Imploser
      @Imploser 3 года назад +3

      ​@@TechBuddyTR Bu konuyu anemiklik üzerinden değerlendirirseniz daha iyi anlaşılacaktır. DTO'lar herhangi bir katmandan katmana veri taşımak için kullanılırlar. Value object'in DDD tanımı ise AggregateRoot içerisinde varolur ve anemik olmak durumunda değiller, yani kendi iş koşullarını yönetebilirler. Ek olarak; AggregateRoot ile Entity aynı obje olmak durumunda değil, bu şekilde kullananlar olduğu gibi farklı objeler olarak da değerlendirilebilir. Ben kişisel olarak farklı modeller olması taraftarıyım. Çünkü AggregareRoot'un ORM bağımlı olmaması ve entity'nin anemik olmasını savunanlardanım. Entity'ler bana göre sadece database objeleri olarak varlıklarını sürdürmeliler.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      @@Imploser Aslında bence de ayrı olmalılar ancak ORM bağımlılığı dediğimiz şeyin tanımı günden güne değişir hale geldi. İster EF kullanın ister kullanmayın veritabanı için bir şeyler kullanıyorsanız veya kendiniz yazıyorsanız öncelikle proje sonra da yazılımcılar için hayatı kolaylaştıran yenilikler eklemek gerekiyor ki EF5 ile DDD ye de uyum sağlayabilmek için bunu çok güzel bir şekilde yapmışlar. Ama bildiğimiz gibi DDD veya buna benzeyen bir çok yaklaşım ve bu yaklaşımların tecrübeleri ne bir video da ne de bu kadar kısa sürede anlatılacak şeyler değil. Elimden geldiğinde kendi kişisel tercihlerimi de bir kenara bırakarak kendime örnek olarak aldığım proje veya insanların da fazlasıyla kullandığı teknikleri anlatarak ve bunu yaparken de açıklayıcı olmak niyetindeyim.

    • @Imploser
      @Imploser 3 года назад +4

      @@TechBuddyTR ORM bağımlılığı konusunu şöyle düşünebiliriz. Örneğin DDD ile başladığınız bir projede DB olarak MsSql tercih ettiniz. Proje geliştirildi ve canlıya çıktı, üzerine birçok feature yazdınız. Sonradan farkettiniz ki aslında sizin ilişkisel veri tabanına ihtiyacınız yok ve NoSql'den daha iyi verim alacaksınız. NoSql tabanlı MongoDB'ye geçiş yapmak istediniz. Kullandığınız ORM de MongoDB'ye destek vermiyor veya veri yapısında değişiklik ihtiyacınız oldu. Sizin tüm iş koşullarını yönettiğiniz AggregateRoot üzerinde böyle bir değişiklik yapmak hem zahmet verici hem de migration ihtiyacı doğurabilir. Bu nedenle domain modelinizin framework bağımlılığı getirmiyor olması sizin için bir avantaj. Özellikle anotasyon bazlı entity tasarımlarında bu daha büyük bir problem olabilir. .NET tarafında bir çok ORM'in fluent yapıları mevcut, bu bir avantaj getiriyor size ama bakın yine ORM bağımlı bir avantaj. Mesela DB değil, ORM'in performansından memnun kalmadınız, EFCore yerine Dapper tercih etmeniz gerekiyor, yine ORM bağımlı aggregate tasarımınız etkilenebilir. Başka bir örnek; AggregateRoot üzerinde database'e yazmak istemediğiniz in memory kullanacağınız nesneler olabilir, bu da aggregate root üzerinde kalabalık yaratıyor. Yada bir value object'i tablo olarak tutmak yerine sadece id'sini tutmak isteyebilirsiniz ama domain üzerinde obje olarak değerlendirmek size daha yönetilebilir bir yapı sağlayabilir. Son geliştirdiğim projeler java'da ve Hibernate kullanıyorum. Java'nın aspect oriented tarafı daha kullanışlı olduğu için anotasyon bazlı entity tasarımları tercih ediliyor. Bu durumda domain'e yine teknoloji bağımlı geldi. Temelde dil ve teknoloji bağımlılığından uzak bir domain modellemesi hem daha yönetilebilir, hem de kolaylıkla evrilebilir bir domain tasarımı getirecektir diye düşünüyorum.

    • @TechBuddyTR
      @TechBuddyTR  3 года назад +1

      ​@@Imploser Buradaki konu yine Orm bağımlılığı olmuyor aslında çünkü bir bağımlılığı kaldırabilmek için repository pattern ler tercih ediyoruz. Eğer siz Domain'inizi nasıl düzenleyeceğinize karar verdiyseniz ve bunun doğru olduğunu düşünüyorsanız ister orm kullanarak oracle'a bağlanın isterseniz custom bir context ile mongo ya. Ama Aggregate tarafının sistem içerisindeki başka bir parçaya bağımlı olmaması gerek, katılıyorum o konuda. Bu sebeple kullanılan pattern ler değiştirilebilir veya yeni geliştirmeler eklenebilir kullanılan sistemlere. Aggregate'lerin Entity olarak tanımlanması bence yine Orm bağımlılığı getirmiyor çünkü bu aslında ORM'i nasıl kullandığınız ile de alakalı. Ama en doğrusu Aggregate için Entity i ayırıp sadece Aggregate içerisinde referans olarak kullanmak veya aradaki iletişim yöntemini geliştirmek olacaktır

  • @erenserinyel9105
    @erenserinyel9105 11 месяцев назад +1

    hocam sevgiler, factory design pattern konusunu da işlerseniz çok mutlu olurum. teşekkürler.

    • @TechBuddyTR
      @TechBuddyTR  10 месяцев назад +1

      Videosu geldi, şu an sadece katıl üyelerine özel. Yakında herkesin erişimine açılacak.

  • @TurgayTuerk
    @TurgayTuerk Год назад +3

    DDD epeydir ilgimi cekiyordu. Emeginize ve zahmetinize saglik. Mimarisi cok ilginc kurgulanmis. Ancak bir o kadarda merak uyandirici. Kurgulanmasi zahmetli gorunsede, buyuk projelerde kesinlile verimli gibi gorunuyor. Anladigim kadari ile aslinda Aggregate lar ayni zamanda bir Entity ozelligi de tasiyorlar sanki!? O halde Aggregate classlarimizi hem Entity hemde Aggregate dan turetmek yerine, AggregateRoot u Entity'den tureyecek sekilde tasarlamak mumkun olabilirmi?

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      Aggregateroot içerisinde iş kurallarımız da yer alıyor. Bu kuralları yönetmek normalde entity'lerin görevleri değil bildiğiniz gibi. O yüzden AggregateRoot'larımızı entity den türetmiyoruz. Entity'lerimiz ve Aggregate'lerimiz hem anlam hem kavram bakımından birbirinden farklı objelerimiz yani

  • @iyilm4z528
    @iyilm4z528 Год назад +2

    Emeğinize sağlık. Bir düzeltme yapmak istiyorum. Repository application değil domain katmanının bir elemanıdır. Repository interfacelerini domain katmanında, implementasyonlarını ise infrastructure katmanında yapmalıyız.

    • @k2an
      @k2an Год назад

      Neden? Böyle bir zorunluluk temel olarak yok. Bu sizin ve gördüğünüz örneklerin ve yaklaşımların sonucu. Bu yorumu okuyanlar büyük ihtimalle aynen böyle düşünecek. Okunabilir kod yazmak zordur ondan bazı standartlar vardır diyebiliriz ama bu zorunluluk değildir. bence hatalı bir şey yok.

    • @iyilm4z528
      @iyilm4z528 Год назад +1

      @@k2an, dogru bir ddd yaklasiminda repository interfaceleri kesinlikle domain katmaninin bir elemanidir. Yine ddd’ye gore application katmani domain katmanina bagimlidir. Tersi olsaydi domain katmanindan repository interfacelerine erisim olmayacakti. Ve bizler bir diger domain katmani elemanlari olan entity/aggregate root ve ozellikle domain servislerden repository’lere erisemeyecektik. Sizin yazdiginiz programlama dili heralde circle referans destekliyor?

  • @RapAz17
    @RapAz17 Год назад +1

    hocam DDD gibi kompleks bir yapıyı kısa sürede bu kadar detaylı şekilde anlattığınız için teşekkür ederim. DDD ile ilgili başka videolarınızız var mı? varsa nasıl ulaşa bilirim? teşekkürler.

    • @TechBuddyTR
      @TechBuddyTR  Год назад

      Ddd nin uygulanması videosu var Microservice video serisinde :))

    • @RapAz17
      @RapAz17 Год назад +1

      @@TechBuddyTR bilgi ve hızlı cevabınız için teşekkür ederim.

  • @AlphaTVShorts
    @AlphaTVShorts Год назад

    Validation'ları Entity içerisindeki constructor da yaptık. O zaman fluent validation vb. gibi yapılar ile handler'larda bir validasyon yapmamıza gerek kalmıyor değil mi?
    Bir de iş kuralları gereği veritabanına gidilmesi gerekiyorsa, örneğin yeni bir kategori ekleneccek ve katerogi adı tekrar eklenmemeli gibi veya buna benzer. Buradaki iş kuralını Handler'da mı yapmak gerekir yoksa entity içerisinde mi, entity içinde yapılması için entity nin repository'e bağımlı olması ve dışardan set edilmesi gerektiği için olacağını düşünmüyorum fakat her okuduğum yazıda iş kuralları domain katmanında yapılır yazıldığı için kafam karıştı.

    • @agahozer2519
      @agahozer2519 Год назад

      Bu yapıda benim en çok kafamı karıştıran şey kuralların nereye yazılması oluyor. Kendimce şu şekilde yapıyorum. Kural veritabanı bütünlüğünü korumak için yazılıyorsa veya işin yöneticileri tarafından (müdürler ceolar vs) değiştirilemeyecekse hatta haberileri bile olmasa olur kuralları ise domainde diğer bütün kurallar, bana söylenenler şöyle olsun böyle olsun gibi kurallar applicationda.

  • @dev.ahmetcanvarol
    @dev.ahmetcanvarol 10 месяцев назад +1

    Selamlar hocam, Order tablosuna IAggreateRoot miras verdik peki Buyer, sınıfın'da IAggreateRoot ile miras vermemiz gerekmezmiydi yoksa kaçırdığım biryer mi var aceba?

    • @TechBuddyTR
      @TechBuddyTR  10 месяцев назад +1

      Selamlar, Order tarafında İş Kurallarımız vardı o yüzden ayrı bir domain olmak durumundaydı ancak aynı şey Buyer için geçerli değildi. O kendi başına bir domain değildi sadece bir Entity'ydi. Ancak microservice projesi video serisinde Order projesi içerisinde Buyer tarafında IAggregateRoot olarak işaretledik çünkü orada bir domain görevi görüyordu Buyer :) O videoyu izleyebilirsiniz.

  • @kritikyorumer
    @kritikyorumer 2 года назад +2

    Hocam bu kadar şey anlattınız ama benim en dikkatimi çeken şey
    Aggregate(x,y)=>x^y oldu.
    araştırdım ama anlayamadım. int int operator yazıyodu. kendim denedim 1^4 gibi 5 sonucu döndü. ne işe yarıyor bu ^ ?
    Teşekkürler

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +1

      Selamlar, oradaki ^ işaretnin anlamı "Özel Veya" anlamına geliyor. İki integer için özel bir şart kontrolü sağlıyor. Detaylı açıklamayı şuradan bulabilirsiniz.
      www.csharpnedir.com/articles/read/?id=180

  • @dnzkrblt
    @dnzkrblt 2 года назад +1

    Hocam burada buyer yoksa neden ekliyoruz. Buyer zaten sistemde kayıtlı değil midir? Yoksa demekki sistemde kayıtlı kişiyi alamamışızdır ve hata dönmeliyiz diye düşünüyorum.

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +1

      Bu tamamen sistemi nasıl tasarladığınıza göre değişir. Kullanıcı mutlaka olmalı ve sipariş işlemi öyle başlamalı diyebiliriz. Bu durumda bahsettiğiniz gibi olmalı. Diğer yandan da kullanıcı giriş yapmadan sipariş verebilsin ama ben bunun kaydını tutabilmek için kayıt edeyim de diyebiliriz. O zaman da bu videodaki gibi olabilir.

  • @alinin5lirasvar943
    @alinin5lirasvar943 Год назад

    Hocam elinize sağlık güzel video ama sistem değişikliğe duyarlı denmekte bakınız küçük bir entity değişiminde bile 20 tane yer değiştirdik :) biraz gereksiz gibi geldi sahsen

    • @TechBuddyTR
      @TechBuddyTR  Год назад +2

      şöyle düşünmek lazım. Bir entity değiştiriğinde yaptığımız tüm değişiklikler o domain içerisinde yapıldı. İşlerin çok büyüdüğü, her domain'ini ayrı takımlar hatta belki de firmalar tarafından yapıldığını düşünün. Bu durumda yaptığımız değişiklik sadece bizi ve takımımızı ilgilendirecek. Başka bir domain'de değişiklik yapmak için, başkalarını beklemek ve etkilemek zorunda kalmıyoruz :)

  • @dogangumus2683
    @dogangumus2683 Месяц назад +2

    Takıldığım bir nokta var.
    ben bir order oluşturduğumda, neden gidip o userName içerde varmı yokmu diye kontrol ediyorum? buna neden ihtiyaç duyuyoruz?
    şöyle örnek vereyim. bir uygulamaya login olunca zaten o uygulama login işlemleri sırasında benim user bilgilerimi alıyor. JWT aktif ise istediği yerde alıp kullanabilir. yani jwt aktif olduğu sürece benim user bilgilerim orderda kullanılacak. tamam o zaman neden burada o userName varmı yokmu diye bir kontrole gidiyorum?
    anlatımınız gayet başarılı. bu takıldığım noktayı açıklarsanız çok sevinirim. teşekkürler.

    • @TechBuddyTR
      @TechBuddyTR  Месяц назад +1

      Videoda da açıklamaya çalışmıştım. Eğer zaten merkezi bir Authentication yapımız varsa elbette gerek yok kullanıcı bilgisini sorgulamaya. Order ile ilişkilendireceğimiz bilgileri JWT içerisinde veya erişebileceğimiz başka bir yerde varsa gidip oradan da alabiliriz. Ancak bu örneğimizde böyle bir yapımız yoktu :)

    • @dogangumus2683
      @dogangumus2683 Месяц назад +1

      @@TechBuddyTR Anladım bu sadece spesifik bir örnekmiş ve senaryodan senaryoya değişebilir. :) evet şuan tamamen anladım. teşekkür ederim :))

  • @thesandboxgamingvideos
    @thesandboxgamingvideos Месяц назад

    32:15 Hocam bu DDD Solid'e aykırı olmuş olmuyor mu ? Order sonuçta bir entity ama içinde işlem yapılıyor.

    • @TechBuddyTR
      @TechBuddyTR  Месяц назад +1

      SOLID'in hangi prensibine aykırı oluyor?

    • @thesandboxgamingvideos
      @thesandboxgamingvideos Месяц назад

      @@TechBuddyTR Single responsiblity. entity içinde method kullanıyoruz. order item ekliyoruz order entity'si içinde işlemleri yaparken if kontrolleri de ekledik business ruleları.

  • @teknolojiuzmaniburada
    @teknolojiuzmaniburada 2 года назад +1

    İlk defa bir proje oluştururken src klasörü oluşturulduğunu gördüm .Nette. DDD'yi yeni yeni tanımaya başlıyorum. Ama video o kadar üst seviye olmuş ki hiçbir şey anlamadım valla. Uzun zamandır yazılım geliştiriyorum ama bu video bana o kadar ağır geldi ki anlatamam. Hiç alışık olmadığım, standart olarak gelişirdiğim yöntemin o kadar uzağında bir yapı ile çalıştınız ki videonun en başında hafif motor yağım ısınmaya başlamıştı, mediatoru kullanmaya başlayınca iptal oldum. Katmanlar bile hiç alışık olduğum şekilde değil. Hani DataAccess, Entities, Business gibi katmanlar oluştururduk ya, burada hiç kullanmadınız. Mesela validasyon işlemlerini neden Business adında bir katman oluşturup orada yazmak yerine neden direkt sınıflar içinde uyguladınız hiç anlayamadım. BaseEntity sınıfına notification collection eklediniz onun hala mantığını anlamaya çalışıyorum. Ki bundan önce oluşturduğunuz event ve event handlera hiç kafam basmadı. 10 yıldan fazla bir zamandır yazılım geliştiriyorum ancak bu videoda kullanılanlar şu an kendimi sorgulamamı ve sanırım bu iş bana göre değilmiş bıraksam mı diye bir düşünceye soktu. Yazılıma yeni başlayan biri gibi yabancı kaldım resmen. Başvurduğum bir çok firma hep domain bilgisi soruyor. Nedir bu Domain Driven diye araştırmaya başladım öğrenmek için ve buraya geldim. Sanırım bu video ile umudumu yitirdim :(
    Emeğinize sağlık.

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +5

      Merhabalar, Öncelikle DDD bizim bu zamana kadar kullandığımız yapıların hizmet ettiği şeye farklı bir yoldan hizmet ediyor. Herkes bunu bilmek veya kullanmak zorunda değil ama piyasada fazlasıyla kullanılmaya başlandı artık DDD. Çok faydası görüldü çünkü ama zaman açısından biraz maliyetli olduğu için her projede mutlaka kullanılması gerekmiyor. Hatta bazı durumlarda kullanılmamalı.
      Business rule ları ayırdığımız anda Bounded Context dışına çıkmış oluyoruz ve o yüzden DDD kuralını ihlal etmiş oluyoruz. O yüzden tüm kontrol Aggreator sınıfımızda oluyor.
      Kendinizi sorgulamanıza veya bundan vazgeçmenize gerek yok bence. İnternette çok kaynak var ddd ile ilgili. Kabul ediyorum bu zamana kadar öğrendiklerimize ters bir senaryo ama öğrenmek bir şey kaybettirmez bence :-)

    • @teknolojiuzmaniburada
      @teknolojiuzmaniburada 2 года назад +2

      @@TechBuddyTR çok teşekkür ederim hocam 🙏 😊bir mülakatta domain model, domain driven design kullanıyor musunuz nedir kullanıyor musunuz diye sormuşlardı. Sadece nette okuduğum tanımlardan aklıma gelenleri söylemiştim. Ancak bir soru daha sordular. Aggregator kullandınız mı ne işe yarar diye. İşte bu soruya tek kelime cevap veremedim. Hala veremiyorum çünkü bir türlü anlayamıyorum ne işe yaradığını. Siz de video bahsetmişsiniz. Bu terimin burada tam olarak ne anlama geldiğini ne görev gördüğünü hala anlamadım. Belli ki önemli bir konu. Tam olarak nedir hocam Aggregator dedikleri şey? Lütfen 5 yaşımdaymışım gibi biraz anlatabilir misiniz? 😊😊😊

  • @dnzkrblt
    @dnzkrblt 2 года назад +1

    OrderItem neden ValueObject değil?

    • @TechBuddyTR
      @TechBuddyTR  2 года назад +2

      OrderItem bir Order içerisinde birden fazla olabilir. Birden fazla olduğu durumlarda da bir kimliği olması gerekir. Kimliği olan objeleri ValueObject olarak tasarlayamıyoruz.

  • @alisahin7986
    @alisahin7986 Год назад

    DFd dosyasını açmak için bir program varmi

  • @SAXXSSX
    @SAXXSSX 3 года назад +1

    source code'a erişme şansımız var mıdır acaba?

    • @TechBuddyTR
      @TechBuddyTR  3 года назад

      Videonun açıklamalar kısmına eklenmiştir link.

    • @SAXXSSX
      @SAXXSSX 3 года назад +1

      @@TechBuddyTR teşekkür ederim

  • @cemalgulbeyaz
    @cemalgulbeyaz Год назад

    Biraz karmaşık mı bana mı öyle geldi?

    • @TechBuddyTR
      @TechBuddyTR  Год назад +1

      DDD nin kendisi biraz karmaşık :) Elimden geldiği kadar sadeleştirerek anlatmaya çalıştım

    • @emreaka3965
      @emreaka3965 4 месяца назад

      Value Object'i record yaparsan oradaki metotlara veya çoğuna ihtiyacın olmuyor zaten eşitlik kontrolü yaparken structural olarak karşılaştırıyor ve zaten kendisi immutable olduğu için onun için de ekstra bir şey yapmana gerek kalmıyor bu durumda işaretlemek için bir interface yeterli olur gibi görünüyor.

  • @gordonfreimann
    @gordonfreimann 2 года назад +3

    ValueObject yerine direk record kullanılmalı. .NET 5 te vardı diye hatırlıyorum zaten şuan .NET 6 . Equality overridelarına gerek kalmaz. Saygılar.

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      Evet record kullanılabilir ValueObject yerine ama record'lar bellekteki Heap bölgesinde tutulduğu için çok yüksek sayıda istek alan metodlarda kullanmaktan biraz kaçınmak gerekebilir :)

    • @gordonfreimann
      @gordonfreimann 2 года назад

      @@TechBuddyTR stack demek istediniz sanirim, heap dinamik bellek icin gecerli c#taki struct olmayan veya stackalloc ile yaratilmayan tum objeler heapte yaratılır ve yavastir. Stack cok hizlidir evet limitlidir ama mb boyutlarinda bir limiti mevcut. Bir value objesi bi requestte bu boyutlara geliosa zaten sıkıntı record da degildir :)

    • @TechBuddyTR
      @TechBuddyTR  2 года назад

      @Gordon Freeman evet stack demek istedim :)
      Doğru söylüyorsunuz sıkıntı başka yerdedir bu durumda ama yine de bir developer olarak bunlara hakim olmak önemli.
      Stack hızlı evet çünkü obje kullanıldıktan sonra temizleniyor ama dediğiniz gibi limitli. Çok yüksek kullanımlarda dikkatli olmakta fayda var :)

    • @busra.tuncdan
      @busra.tuncdan Год назад +4

      @@TechBuddyTR okuyacaklara not olsun: artık record class ve record struct türleri ayrıldığı için heap'te tutulmak istenen türler için record class kullanılabilir.