What is DDD | Domain Driven Design

Поділитися
Вставка
  • Опубліковано 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.
  • Наука та технологія

КОМЕНТАРІ • 107

  • @ucretsiztakipci6612
    @ucretsiztakipci6612 3 роки тому +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. 😊

  • @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

  • @eminucar1
    @eminucar1 2 роки тому +2

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

  • @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

  • @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

  • @aog.tr.6828
    @aog.tr.6828 Рік тому +2

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

  • @ozlemaslann
    @ozlemaslann Рік тому +1

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

  • @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ı :(

  • @lutfullahozturk6889
    @lutfullahozturk6889 Рік тому +1

    Elinize sağlık hocam.

  • @_mehmet
    @_mehmet 2 роки тому +2

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

  • @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

  • @muhammedmustafavanl9463
    @muhammedmustafavanl9463 2 роки тому +1

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

  • @taner-saydam
    @taner-saydam 2 роки тому +1

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

  • @ahmetbcakici
    @ahmetbcakici 2 роки тому +3

    Emeginize saglik cok guzel ve degerli bir icerik olmus 💯

    • @TechBuddyTR
      @TechBuddyTR  2 роки тому +1

      Teşekkür ederim. İyi seyirler.

  • @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 3 місяці тому

      Sarsıldım

  • @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ış.

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

  • @babakhatamlou7788
    @babakhatamlou7788 Рік тому +1

    Harika

  • @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 :-)

  • @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

  • @farukakpnar2265
    @farukakpnar2265 Місяць тому +1

    Hoş bulduk

  • @AhmetYigiter
    @AhmetYigiter 3 роки тому +3

    Fark yaratıyorsun 👏

  • @mehmetmayti
    @mehmetmayti Рік тому +1

    Teşekkürler

  • @saynmail6927
    @saynmail6927 Рік тому

    Teşekkürler hocam...

  • @futurexjam2
    @futurexjam2 11 місяців тому

    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.

  • @utkuozkan6238
    @utkuozkan6238 3 роки тому +2

    hocam elinize sağlık

    • @TechBuddyTR
      @TechBuddyTR  3 роки тому +1

      Umarım faydalı olmuştur 😊

  • @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 😊

  • @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 Рік тому +1

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

    • @TechBuddyTR
      @TechBuddyTR  Рік тому +1

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

  • @dev.ahmetcanvarol
    @dev.ahmetcanvarol 11 місяців тому +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  11 місяців тому +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.

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

  • @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 :)

  • @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

  • @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

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

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

  • @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?

    • @herturluhalikilimtravel
      @herturluhalikilimtravel 11 днів тому

      @@iyilm4z528 domainden repoya gidilmez, IO yapılmaz. O sebeple repo domainin değil, application ve infranın sorumluluğundadır. bknz: Functional architecture, Pure functions, Impure functions

  • @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 :)

  • @alisahin7986
    @alisahin7986 Рік тому

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

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

  • @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

  • @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? 😊😊😊

  • @thesandboxgamingvideos
    @thesandboxgamingvideos 2 місяці тому

    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  2 місяці тому +1

      SOLID'in hangi prensibine aykırı oluyor?

    • @thesandboxgamingvideos
      @thesandboxgamingvideos 2 місяці тому

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

  • @dogangumus2683
    @dogangumus2683 2 місяці тому +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  2 місяці тому +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 2 місяці тому +1

      @@TechBuddyTR Anladım bu sadece spesifik bir örnekmiş ve senaryodan senaryoya değişebilir. :) evet şuan tamamen anladım. 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 5 місяців тому

      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.