Domain Layer Structure & Skeleton | Clean Architecture & DDD From Scratch Tutorial | Part 13

  Рет қаралды 126,515

Amichai Mantinband

Amichai Mantinband

Күн бұрын

Пікірлер: 147
@TurgayTuerk
@TurgayTuerk 2 жыл бұрын
I can't even imagine how much effort it takes to prepare a series of tutorials on this topic. Thank you so much! looking forward for the next one!
@amantinband
@amantinband 2 жыл бұрын
Thanks, Turgay. My wife would agree it's way too much effort 😅
@ibrahimkoz1983
@ibrahimkoz1983 2 жыл бұрын
I cannot explain how much I appreciate your work. This is such an incredibly useful and decent series.
@amantinband
@amantinband Жыл бұрын
Thanks, Ibrahim 🙏🏼
@avecesar
@avecesar Жыл бұрын
I can´t thank you enough... I've learned a lot of concepts, but the most valuable lesson has been the fact that not every domain fit into this practisess; complexity is a choise, some times.
@andreaskonomis3
@andreaskonomis3 Жыл бұрын
Had read the blue book till a point and the argument regarding the difference an organized namespace/folder structure makes stuck with me, but hadn't come across from anyone else such an example before. Kudos! Keep rocking!
@tomheijtink8688
@tomheijtink8688 2 жыл бұрын
We have been doing something similar. One difference is that we put all the aggregates in a folder called Aggregates. So the common folder doesn't get mixed up with the other aggregate folders. It works well, and have so not noticed any real downsides to this approach. One interesting idea is to use the new file nesting capabilities in visual studio. This could in theory do away with many folders. And you would be able to nest a value object for a specific entity.
@gui.ferreira
@gui.ferreira 2 жыл бұрын
It's amazing how the folder structure can change the way how you approach all other decisions. 👏👏👏
@amantinband
@amantinband 2 жыл бұрын
💯
@mdsahidulhussain8501
@mdsahidulhussain8501 2 жыл бұрын
I have been following this series from day 1. Its very informative. I really appreciate your work. Thanks for sharing your knowledge.
@vincent_sz
@vincent_sz Ай бұрын
Nice series. If you have to place sth. in common and you are unhappy, then most likely it is or will be a missing bounded context. Rating is a gold example here because it starts with a value object and then grows with the app
@DanielOliveira-hd9uc
@DanielOliveira-hd9uc 2 жыл бұрын
I've never seen these approaches before, it's super clean, thanks for sharing with us!
@pikpok
@pikpok 2 ай бұрын
The problem with DDD aproach is: There is no formalized approach how to do this. Its some kind philosophy tailored per team/teams/whatever structure it is. Now you can say we do the same way as this guy on youtube. Some folks do different way, some others do another way. As long its have DDD "principles" described in Evans book and extended by Vernon, everything else is just architecture software approach for particular application.
@ahmad_9877
@ahmad_9877 Жыл бұрын
I have some question about your approach: - Why are you using value objects for ids? In most cases ids have little logic and it seems to be a redundant abstraction. We can use it wherever we have some logic more than simple comparison, and I don't get why you use it as a global pattern. - Why you use static factory method inside the class, instead of constructors? Constructors in this example are pretty simple, and we usually use factory methods when creating an object is complicated. Using factory method everywhere also seems redundant to me. Also I prefer factory classes rather than factory methods in such case, since this static methods nested inside the class will bloat the class the same as a big constructor will do (actually I don't see any differences between constructors and static factory methods at all). Factory methods in my opinion are suitable when used as a member method of a container class, a super class, etc. - Why all properties just have getters? How are you going to set them? What do you think about public setters on properties?
@mr-maschi
@mr-maschi 2 ай бұрын
Ids should not have any logic at all. So having it as a value object is perfectly fine. As for the named constructor: Vo's are in general very small. So it does not bloat up the code too much. Named constructors are keeping your vo open for extension. Imagine having two of them. One is fromString and the other is fromInt or fromOtherVo. Also vos are responsible for them selves. So only they know how they are able to get instantiated. That's the reason for no external factory class
@mr-maschi
@mr-maschi 2 ай бұрын
Setters: Vo's are immutable and this is their main job
@amantinband
@amantinband 2 жыл бұрын
Curious to hear what you thought about the implementation part of this video! Was it too fast? Too slow? Would you have preferred I hadn't skipped writing out the aggregate parts we already covered? Also, would you have preferred I actually wrote out the entire domain?
@TurgayTuerk
@TurgayTuerk 2 жыл бұрын
The implementation part as well as the entire tutorial was very explanatory, even if I used the pause function in few places :) Thanks again for your effort! Regarding the "functional" based folder structure; wouldn't the best location for the Error.User class be inside the "User" folder, or does Errors generally belong to the common folder?
@jendrikoltmanns1017
@jendrikoltmanns1017 2 жыл бұрын
Really enjoyed it. Speed was suitable, but i already was in touch with those concepts, so maybe for newbies could be a bit to fast (Since its a video, you can easily stop and manipulate speed ;) ). Implementing the whole domain is not needed, cause concept stays the same right. For me different approaches are more interesting. As example i would always go for the functional cohesion, instead of categorically. Just curious why you implemented additional value objects for the IDs, cause new creation of guid could be handled in base class. Also this post from Vaughn Vernon was very exciting, to decouple entities from the ORM with State-Objects. kalele.io/modeling-aggregates-with-ddd-and-entity-framework/ Best wishes, thanks :)
@seanvogel8067
@seanvogel8067 2 жыл бұрын
It seems a little fast, but skipping the writing of similar aggregate parts makes sense.
@gabrielnathan929
@gabrielnathan929 2 ай бұрын
This video inspired me even more to use ddd in django. Very solid framework for development.
@w.5948
@w.5948 2 ай бұрын
Your tutorials are so great but I'm watching them at 0.75 speed. ;-). Much better.
@hugoribeiro1317
@hugoribeiro1317 2 жыл бұрын
What a nice series you're creating, Amichai! Congrats for the great work. One thing I was wondering is if u re gonna make something to not repeat the create/update props in each needed class.
@amantinband
@amantinband 2 жыл бұрын
Thanks, Hugo. No, I don't have a technique for that. Do you have something in mind?
@pdevito
@pdevito 2 жыл бұрын
Always fun seeing how people organize this. Definitely agreed on colocation! Curious to see how the value objects will work for the foreign keys and what interactions with those and their entities will look like. Seems like you might need some interesting helpers on the value objects to facilitate interactions, but maybe there’s some other patterns to help here. Regardless, fun watch as always. Thanks for sharing 🍻
@Meryovi
@Meryovi 2 жыл бұрын
I've been wondering this myself, and in case Amichai uses EF Core if everything he's done so far will play nice. Looking forward to this.
@amantinband
@amantinband 2 жыл бұрын
Yup, we'll deal with this when we cover entity type configurations. Basically, we'll use the HasConversion method for this.
@pdevito
@pdevito 2 жыл бұрын
@@amantinband that’s any value object though. Dealing with the needs around a key are a separate issue I think with different needs. Doing things like an expanded GET list, managing child entities, etc would be interesting to see
@serb1146
@serb1146 Жыл бұрын
Yeah, I wonder, why we create one more abstraction with ValueObject, if this suports "by default" on top of programming language itself. Ex: System.Guid (comparison, generating an so on)
@broodja5384
@broodja5384 Жыл бұрын
Thank you so much, Amichai, great work, keep it up. I personally enjoy you voice pitch and pace, make it much more enjoyable to listen complex explanitions. Hope this time I can FINALLY make it straight and logical in my head. P.S.: Can you say what's that suggetion tool at 8:30?
@amantinband
@amantinband Жыл бұрын
Thanks! It’s GitHub Co-Pilot
@gzoechi
@gzoechi Жыл бұрын
Great stuff👍 I'm wondering where the other parts are. This is part 13 but the playlist only contains 7 videos 🤔
@שיפלאח
@שיפלאח 2 жыл бұрын
Hi Amichai, Great Video really like the series, I think based on the gist in the description that maybe you should have an common entity with created/updated DateTime properties that inherit from the base entity class and then we can have less duplication of code to have it on each Entity we creating
@amantinband
@amantinband 2 жыл бұрын
Thanks שי. We'll have an IAuditableEntity interface that all the auditable entities will implement in the future. When we reach the persistence layer, we'll cover how to populate these properties.
@mabdullahsari
@mabdullahsari 2 жыл бұрын
Directly instantiating a Guid inside the VO couples the Domain to the Infrastructure as it relies on the system's random device making it no longer "core" code. Do you have plans to move this to a Repository once they exist e.g. a NextIdentity method?
@markyavorskiy5335
@markyavorskiy5335 2 жыл бұрын
Yes, I had almost the same question about when it is the right time to generate an id for a entity/agragate root. And how the corresponding entity/agragate should live before this id will be generated? Suppose, it has to be a separate object. Thant YOU!
@amantinband
@amantinband 2 жыл бұрын
Great comment. It's the topic of a future video 🫣
@n0pee349
@n0pee349 2 жыл бұрын
I LOVE this series so far. Thanks for your effort in making it so smoothe and enjoable. Is there any chance that (in future) you could add some kind of keystrokes monitoring to your films and vs code shortcuts settings (your workflow is amazing)?
@amantinband
@amantinband Жыл бұрын
Thanks! I tried in a draft video. I felt it added too much noise to the screen 🤷🏼‍♂️
@itzW3LF
@itzW3LF Жыл бұрын
I'm not sure I understand how the AverageRating property on a Host and on a Dinner is kept up to date in this example. We said we want a change to an aggregate root not to affect other roots it is related to, but in this case the AverageRating depends on the content of the reviews. Would we need to subscribe to some MenuReviewCreated event to update the rating of the dinner and the host separately?Or is there another approach?
@brandonbailey4491
@brandonbailey4491 Жыл бұрын
Awesome playlist! are you planning on making any more videos for this series?
@johnyepthomi892
@johnyepthomi892 Жыл бұрын
Can you use Typescript for the implementation of the DDD for maybe just one video. I understand you don’t focus on It but will help folks like me anyways, I just watch the conceptual part of and then I have to skip the rest as I don’t code in that language. You explain the concept well so I appreciate your effort.
@belkapro1461
@belkapro1461 2 жыл бұрын
how many episodes are planned, very interesting
@amantinband
@amantinband 2 жыл бұрын
Thanks, Belka. We haven't touched persistence using EF Core & Testing yet, which are rich topics, so I'd say there are at least 8 videos left.
@captianawesome6753
@captianawesome6753 2 жыл бұрын
Don't you have multiple domains inside one project? Guests, menu, dinner etc? When you seperate each (sub) domain the initial structure isn't that bad?
@amantinband
@amantinband 2 жыл бұрын
Domain/Subdomain are logical boundaries. They do not necessarily have a 1:1 mapping to a project, system, or microservice. We would probably split this differently if we were designing a large system. But when starting out, it's definitely possible to start with a monolith and grow as needed. Does that make sense?
@vagnerpadilha3485
@vagnerpadilha3485 2 жыл бұрын
amazing series. One question, for the sake of garbage collector/memory allocation, shouldn't Ids be structures instead of classes? thank you for all this content
@DrHeinzDoofenshmirtz
@DrHeinzDoofenshmirtz 2 жыл бұрын
Hi Amichai! Awesome videos. They have really been missing everywhere on the internet. Definitely the best ones on the subject. One question: Is it really good to force passing an Id in the constructor? Normally the database would decide the Id and set it. Can you tell me why this is a good approach? Or are you planning on rewriting it later when you add the persistence layer and EF?
@amantinband
@amantinband Жыл бұрын
Hey Matthias! Great question. Depends on your approach. Some prefer having the repository/persistence generate the id, some prefer the something similar to what I presented. We’ll cover both approaches in the series 🤙🏼
@robertogonzalorodriguez845
@robertogonzalorodriguez845 2 жыл бұрын
Great video, Amichai! Looking forward to the persistence implementation. Thank you very much.
@amantinband
@amantinband 2 жыл бұрын
Thanks, Roberto! Me too 🤙🏼
@aj.arunkumar
@aj.arunkumar 6 ай бұрын
Great video Amichai... I have a question... Isnt it better to use records for implementing value objects ? I heard from Zoran Horvat that record types are mainly used for implementing value objects
@Atom-Mercury
@Atom-Mercury 7 ай бұрын
Great video thank you❤. What about structuring DDD with N-Tier architecture?
@patrykk.4630
@patrykk.4630 2 жыл бұрын
Hello Amichai, I had a bread from your course because lack of time.. I see that you mafe your repository with buber dinner private. I was following your videos from the beginning and I have a public repo with my code. Can I leave it as public? Your new videos are full of knowledge that I was looking for 😀 Great work
@amantinband
@amantinband Жыл бұрын
Of course! 🫶🏼
@varshard0
@varshard0 6 ай бұрын
Who takes care of populating fields in an aggregate? Does the query take care of calling each repository and put set them as an aggregate entities?
@microtech2448
@microtech2448 10 ай бұрын
Hello, can you please tell how numeric value can be used as Value Object and create it uniquely instead of GUID?
@mohamadyousef163
@mohamadyousef163 Жыл бұрын
What an effort made keep it up (Y) Quick Notes though : 1. regarding the readonly issue modify the public Ireadonlylist Items to be public ReadOnlyCollection this is not castable to List 2. please Could you order the videos in the Domain-Driven Design PlayList in a chronological order Thanks a lot
@HadrielWonda
@HadrielWonda Жыл бұрын
Great work amichai although do you mind teaching us the magic spell used at 13:23 ??
@HARDcoreNOOB321
@HARDcoreNOOB321 Жыл бұрын
Hey man, great video. Is immutable list better choice in this case then read only list (12:15)?
@kevlingo
@kevlingo 2 жыл бұрын
First things first: I really like this structure. I am new to Clean Architecture and just recently heard about vertical (or feature) slicing. One thing this structure does, however, is require a qualification when referencing the aggregate root. For example: public void AddDinner(Dinner.Dinner dinner) . Does this bother anyone else or is this a standard practice and I just need to get over the redundancy? I know this is probably just my weirdness, but thought I'd ask.
@amantinband
@amantinband 2 жыл бұрын
I'm surprised no one has commented on this but you! This is definitely an issue when the namespace and the class name are the same. We'll cover it in a future video 🙂
@vagnerpadilha3485
@vagnerpadilha3485 2 жыл бұрын
I asked myself the same question. I'm really curious how you're going to solve this. Could it be that the solution is for the aggregate folder to be plural??
@michaelfrostholm100
@michaelfrostholm100 2 жыл бұрын
Super cool series, I have watched all 13 videos now, and i learned a lot from these. I am curious about the plan of upcoming videos ? Do you have a plan ? Fx Logging, Persistence, Events, Versioning ?
@amantinband
@amantinband Жыл бұрын
Thanks Michael! Yes, I’m planning to cover all these topics in the future 🤙🏼
@pazzuto
@pazzuto 2 жыл бұрын
The namespace and the class name (Menu.Menu) is really bothersome. May even cause issues when including the namespace somewhere else where, say, Menu would be used. Some experts out there use plural (Menus) or append Aggregate (MenuAggregate) to the folder/namespace. Hoping Amichai will explain how he tackles this issue. Great video as always.
@allenhansen5145
@allenhansen5145 Жыл бұрын
Thanks for bringing this up. I found the folder names/namespaces to be a bit bothersome as well. Thanks for the recommendation and for future readers, this is addressed in this video: kzbin.info/www/bejne/oJ6TdIqil5qprLM
@timur2887
@timur2887 8 ай бұрын
Great coding without a single look on a keyboard!)
@messiyang2934
@messiyang2934 2 жыл бұрын
I really like this video, this removes a lots of confusions in my mind, just curious about where should I put domain services? also under those folders for each aggregate? will that part be covered in upcoming episodes? Really appreciate it 😀
@mabdullahsari
@mabdullahsari 2 жыл бұрын
The Red DDD book by VV covers this. You need to introduce an additional level: Domain.Model Domain.Service Amichai's classes fall under Domain/Model.
@messiyang2934
@messiyang2934 2 жыл бұрын
@@mabdullahsari much appreciate it mate 🙏
@Pachwara
@Pachwara 2 жыл бұрын
Amichai, thanks a lot for your videos We also need a tutorial how to connect all of these things to the database. What framework to use? Entity framework has a lot of constraints (on sealed classes, private members etc.) Thanks
@MetoGamez
@MetoGamez 2 жыл бұрын
This video could not have been better timed, have been learning DDD for the past month or so for work and this cleared up a lot for me, Thank you! I have 1 question though, in your aggregates you define private read only list of value objects pointing to ids of other aggregates. How would you map this to a database? I'm using EF doing code first with FluentAPI and this is the only thing I'm struggling with
@carloswinstonjavierllenas3117
@carloswinstonjavierllenas3117 2 жыл бұрын
Supercool series. Is there gonna be more chapters? Also, are plans to show database integration (I suppose it goes to the infrastructure project)?
@amantinband
@amantinband Жыл бұрын
Thanks! Yes and yes. Persistence via EF Core is the upcoming section in the series 🤙🏼
@Jackinua
@Jackinua Жыл бұрын
It's little bit not about domains when you splitting classes by folders of class-types. Folder name should represent - domain.
@codewithkashif
@codewithkashif 2 жыл бұрын
@Amichai Mantinband so designing aggregates like this - Can we safely say that it is following feature slicing approach?
@camoman1000
@camoman1000 Жыл бұрын
I noticed for domains you took a vertical slice approach why not continue to the architecture/ structure of the project also?
@amantinband
@amantinband Жыл бұрын
I like maintaining the cohesion when possible. The projects are separated following CA, the internal separation however, as you said is by feature
@camoman1000
@camoman1000 Жыл бұрын
@@amantinband are you using CA for projects for the tutorial series to demonstrate CA? If so, do you use or would you consider using VSA?
@reindeerbreeder11
@reindeerbreeder11 Жыл бұрын
Thank you for the video! One question: what about integers? I mean if I want to use int as ID, how I should generate it in “CreateUniq”?
@ylazerson
@ylazerson 9 ай бұрын
great video on a complex subject - thanks!
@vyteniskajackas7579
@vyteniskajackas7579 6 ай бұрын
Can someone explain, what is the idea behind those "EntityId" objects and inheriting from them? What is the benefit?
@ti_doo
@ti_doo Жыл бұрын
Awesomely great video, well structed and presented. Thanks a lot!
@Yarkendar
@Yarkendar 2 жыл бұрын
Best guides about DDD! Thanks, man
@Emmap11
@Emmap11 Жыл бұрын
This is a GREAT JOB!!! I love this series, was fantastic thank you!
@ismaelperezmesa524
@ismaelperezmesa524 2 жыл бұрын
@Amichai Thank you again for all your effort, every lesson is greater. I would like to ask you something that is really urgent to me: How can I dockerize a project like this we are studying with you for deploying as a container on a cloud? Please, Can you or another people here, share the way or an example to achieve it? Thanks a lot, you’re amazing!
@Masteroxify
@Masteroxify Жыл бұрын
Will it be working with EF, Dapper ? Yours constructors always make new ID (primary key ?) , what's is incompliance with Database schema, is it ?
@gtejeda
@gtejeda 2 жыл бұрын
Excellent explanation and series so far, good job!
@jensingels5958
@jensingels5958 Жыл бұрын
There is a lot of knowledge missing regarding this topic. My last company started adapting this style 6 months ago in new projects and I felt they were early adapters. Are there other sources besides you or working with Microsoft to obtain this information?
@squadwuschel
@squadwuschel 2 жыл бұрын
Hi, its an amazing video tutorial - I've watched it in one week :-). But I am missing a nother big topic in your videos - what about logging? How do you log Errors, debugging Informations and so on? Thanks a lot for your tutorials.
@amantinband
@amantinband Жыл бұрын
Thanks! We’ll cover logging in a future video 🤙🏼
@juke-duke
@juke-duke Жыл бұрын
Why is MenuSection a Entity here and not a ValueObject? Like why are only Ids ValueObjects?
@msek97
@msek97 2 жыл бұрын
Are you going to use Entity Framework in this course?
@samimis97
@samimis97 Жыл бұрын
Hi, can you help.... why menuesection or menueitem are entities and not valueobjects? Do they have a life ?
@carmineos
@carmineos 2 жыл бұрын
Clear as always, looking at the "homework" and specially at Dinner.Status and DinnerReservation.ReservationStatus, I guess one of the next videos will also cover enums?
@amantinband
@amantinband 2 жыл бұрын
Yeah, perhaps I should have put an example of an Enum in today's video, didn't think about it 🤦‍♂️ For now, you can either use native Enums or Ardalis's SmartEnums. I'll make sure to cover it in one of the upcoming videos. Thanks for commenting!
@Mauriciog87
@Mauriciog87 2 жыл бұрын
Can't wait for the next one!
@birukayalew3862
@birukayalew3862 2 жыл бұрын
Fantastic explanation and implementation😍 ... I wish I could be one of your patreon but online payment is not applicable in our country. Is there an option to become your patreon to access the source code?
@birukayalew3862
@birukayalew3862 2 жыл бұрын
@@amantinband i really thank you
@vincentcifello4435
@vincentcifello4435 2 жыл бұрын
Thanks again for the great videos! MenuSections and MenuSectionsItems are entities within the Menu Aggregate Root. This makes sense, especially by the Cascading Delete Rule. However, I can't see the difference between those and MenuReview. Shouldn't MenuReview be a collection of entities just as MenuSections? You are treating MenuReviews the same as Dinners. However, if you delete a Menu, then there would be no MenuReviews, but the Dinner would not be deleted.
@vincentcifello4435
@vincentcifello4435 2 жыл бұрын
Also, GuestRating is a collection of entities within Guest. Shouldn't the same be true for MenuReview within Menu? Really trying to understand.
@amantinband
@amantinband Жыл бұрын
Hey Vincent! I cover this in previous videos - generally, we prefer having more aggregates if possible. This is for concurrency, memory and latency reasons. We will merge two aggregates to one when there are some constraints. These constraints can be forcing invariants or perhaps eventual consistency cannot be tolerated. Does that make sense?
@heniroger4304
@heniroger4304 Жыл бұрын
1:37 What is the difference between Aggregate vs entity, Could i persist aggregate or Only the entity can be persisted
@johnroca338
@johnroca338 Жыл бұрын
Great Series! Thank you!
@TheWischmopps
@TheWischmopps 2 жыл бұрын
Hi, thanks a lot for your videos! What is the purpose of making the ctor private and using a static factory instead?
@mabdullahsari
@mabdullahsari 2 жыл бұрын
You can define multiple constructors for different purposes while keeping the state consistent. The internal workings of the object can be changed without worrying about breaking the clients that consume the said object. It also adds *meaning* when used correctly, I wouldn't agree with Create here necessarily though as it's very CRUD-dy. Member.Invite(...) Session.Plan(...) Permission.Assign(...) etc. these make use of the Ubiquitous Language.
@TheWischmopps
@TheWischmopps 2 жыл бұрын
@@mabdullahsari thank you!
@pguti778
@pguti778 2 жыл бұрын
Hello csharper, .md is for mark down! Change that to .dm for domain.
@amitsinghrawat4760
@amitsinghrawat4760 Жыл бұрын
You're doing great, keep it up.
@baulron
@baulron 7 ай бұрын
I loved it. Thank you!
@amantinband
@amantinband 7 ай бұрын
🫶🏼
@nicolasundiano8406
@nicolasundiano8406 2 жыл бұрын
Hi Amichai, im trying to configure the Id's and relations id's between aggregates with entity framework and i dont find a solution how to do it. I think that its simplier putting the type Guid instead of the value object in this case
@amantinband
@amantinband Жыл бұрын
Hi Nicolas. We’ll cover this in depth in the upcoming videos. Generally, I like to design the domain as if the objects are stored in memory and then bend the persistence layer to support this idea. Changing the domain to support persistence is the last resort in my book
@rhtservicesllc
@rhtservicesllc 2 жыл бұрын
Why did you use class instead of record when declaring the entities? World think that record would be better in this scenario
@mabdullahsari
@mabdullahsari 2 жыл бұрын
Uh-oh, I smell domain model anemia.
@sandrorevazishvili1113
@sandrorevazishvili1113 Жыл бұрын
What is an application used to describe in 40s of the video
@MrVipulLal
@MrVipulLal Жыл бұрын
Great explanation
@srezas3580
@srezas3580 2 жыл бұрын
what's the estimated date of finishing this series?
@m_camper
@m_camper Жыл бұрын
Great videos, thank you!
@abdullahalrashidi497
@abdullahalrashidi497 2 жыл бұрын
hey, thanks for the video although I have a different view angle here you totally ignored the bounded context here. and most of the time each bounded context gonna have only one aggregate. so if you considered the bounded contexts each context would be independent and there would be no common directory between them
@mabdullahsari
@mabdullahsari 2 жыл бұрын
I think your understanding of Bounded Context is lacking here. BuberDinner **is** the Bounded Context.
@abdullahalrashidi497
@abdullahalrashidi497 2 жыл бұрын
@@mabdullahsari intresting! I wonder why a bounded context has multiple aggregations !! also, he divided the project directory into different related functionalities (Dinner, Bill, Guest...) for a simple domain, most of the time a bounded context is the subdomain but if the sub-domain serves different functionalities then we have to divide it into multiple bounded contexts
@TheNorthRemember
@TheNorthRemember Жыл бұрын
i'm light years behind this
@bohdankhrystych6110
@bohdankhrystych6110 Жыл бұрын
Why you do not use int as type ids in your models? you use only string and Guid
@lilililliilil
@lilililliilil 2 жыл бұрын
very goooood!!!!❤ ty for the content
@gostau
@gostau 2 жыл бұрын
what is the shortcut for creating folders and files like you?
@amantinband
@amantinband Жыл бұрын
I think I configured them both manually. I use ctrl-shift-n for folder and ctrl-n for file
@caseyspaulding
@caseyspaulding Жыл бұрын
Awesome! Thank you
@ВасильЗауличний-у2е
@ВасильЗауличний-у2е 10 ай бұрын
Good way to explain :) I can only suggest to speak less fast :) Maybe 70% of the current speed as it causes some kind of pressure :) on an average mind processing the new knowledge/howtos etc... But, general layout and approach to explain DDD with code practice is quite good. Thanks!
@suhutwadiyo
@suhutwadiyo 2 жыл бұрын
Amazing 👍
@scott98390
@scott98390 2 жыл бұрын
At the 8:55 mark you replace every occurrence of "MenuId" with "MenuSectionId" - how did you select all instances of MenuId? That was no Ctrl+H !!
@WouterLindenhof
@WouterLindenhof 2 жыл бұрын
Select the range and the press CTRL+SHIFT+L to "Selection => Select All Occurrences", personally I always use just hold down CTRL+D which results in "Selection => Select Next Occurrence"
@amantinband
@amantinband Жыл бұрын
Vim -> :%s/MenuId/MenuSectionId/g 😁
@Linkario86
@Linkario86 Жыл бұрын
I kinda don't get why you're creating an entire class around an Id. Can you explain or link a resource?
@amantinband
@amantinband Жыл бұрын
Check out my video on the Identity paradox
@Linkario86
@Linkario86 Жыл бұрын
@@amantinband Just watched it. Perfect! Thanks!
@ShaikShafiAhmed-u3c
@ShaikShafiAhmed-u3c Ай бұрын
could have shown the rating class as well so that it would be of some help for the people following along Does it only have an Id or does it have other properties like these "ratings": [ { "id": { "value": "00000000-0000-0000-0000-000000000000" }, "hostId": { "value": "00000000-0000-0000-0000-000000000000" }, "dinnerId": { "value": "00000000-0000-0000-0000-000000000000" }, "rating": 4, "createdDateTime": "2020-01-01T00:00:00.0000000Z", "updatedDateTime": "2020-01-01T00:00:00.0000000Z" } ],
@ivandrofly
@ivandrofly Жыл бұрын
5:00 - Feature Slicing
@SilentTremor
@SilentTremor 2 жыл бұрын
I like a lot your material, there are a lot of great stuff presented and a lot to learn, but I personally I hate DDD for the fact that classes (object oriented) define the domain, I prefer to have "services" interfaces as fist class citizens, therefore writing any line of implementation is after I have the pipelines "contracts" get defined. And what I hate the most on DDD, unit test does find the problem in the domain quickly, but apart from domain validity does absolutely nothing in a SOA architecture, and no, I don't have a problem with unit test, i have a problem with code coverage of 100% won't find any of the integration issues.
@bramadl3460
@bramadl3460 Жыл бұрын
why am I, a JavaScript developer, watching C syntax here only to learn DDD T_T
@DOON2011
@DOON2011 Жыл бұрын
until the end of the Part13 , i was happy. because , i could see all source code on KZbin , but , i can not see all domainmodels source code now. and i have to pay money?? i im very disppointed. my long time watstes
@vadims2236
@vadims2236 2 жыл бұрын
Only I hate 'common' naming?
@mabdullahsari
@mabdullahsari 2 жыл бұрын
Vaughn Vernon prefers Common. He's the 2nd most credible person right after Eric Evans.
@evergreen-
@evergreen- 5 ай бұрын
Too much typing. Different classes for IDs??!
Which team will win? Team Joy or Team Gumball?! 🤔
00:29
BigSchool
Рет қаралды 13 МЛН
Triple kill😹
00:18
GG Animation
Рет қаралды 18 МЛН
CAN YOU DO THIS ?
00:23
STORROR
Рет қаралды 48 МЛН
Domain-Driven Design: The Last Explanation You'll Ever Need
21:05
Software Developer Diaries
Рет қаралды 8 М.
Vertical Slice Architecture, not Layers!
46:24
CodeOpinion
Рет қаралды 123 М.
Clean Architecture vs Domain-Driven Design (DDD) - Understand the Difference
11:26
Что такое DDD за 10 минут с примерами
10:03
Алексей Мерсон - Domain-driven design: рецепт для прагматика
58:57
DotNext — конференция для .NET‑разработчиков
Рет қаралды 61 М.
Modeling a Domain With Domain-Driven Design From Scratch | DDD
19:10
Milan Jovanović
Рет қаралды 91 М.
3 Powerful Design Patterns You Should Know
14:26
Amichai Mantinband
Рет қаралды 1 М.
Владимир Хориков - Domain-driven design: Cамое важное
1:13:59
DotNext — конференция для .NET‑разработчиков
Рет қаралды 55 М.
Which team will win? Team Joy or Team Gumball?! 🤔
00:29
BigSchool
Рет қаралды 13 МЛН