Want to master Clean Architecture? Go here: bit.ly/3PupkOJ Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt
@leonardoalvarez57593 ай бұрын
Excellent video, Milan! This is more clear for me!
@MilanJovanovicTech
3 ай бұрын
The next video should help even more
@dandoescode4 ай бұрын
Great video Milan. Keen to see the rest of this series!
@MilanJovanovicTech
3 ай бұрын
Thanks, it's coming together coming slowly
@kurumi6903 ай бұрын
next video should be "creating beautiful micro services app with Aspire NET" 😊
@MilanJovanovicTech
3 ай бұрын
Challenge accepted
@buni15104 ай бұрын
Awesome content, thanks for all the knowledge!
@MilanJovanovicTech
4 ай бұрын
Most welcome!
@dracovk4 ай бұрын
Excellent video Milan! I'm looking forward to future episodes of this series
@MilanJovanovicTech
4 ай бұрын
More coming :)
@sauravbhatta53034 ай бұрын
Hopefully ur modular monolith course will be great.
@MilanJovanovicTech
4 ай бұрын
I'm excited. It'll end up being 12-15 hours of top-notch content. 😁
@jeremylarose5100
4 ай бұрын
If it’s anything like the other course, I can’t wait!
@MilanJovanovicTech
4 ай бұрын
@@jeremylarose5100 My opinion is this one is far better. I've learned a ton from some mistakes made on my first course.
@daveanderson8348
3 ай бұрын
@@MilanJovanovicTech If you put it like that, you're going to make it even more expensive than your other expensive course. I hope you don't set the bar high, because then there is a good chance that many people will look elsewhere!
@MilanJovanovicTech
3 ай бұрын
@@daveanderson8348 It'll be pretty similar to the other one, with a lot more content. But then again, how many other creators regularly update their existing courses or introduce new content? I don't know of many.
@slobodanmikaric21804 ай бұрын
Nice and simple, one thing catches my eye, your Training Application module is dependent on User.Domain? Modules should share DTOs and interfaces using contracts. I guess this is a side effect of moving from monolit to modular monolit and in the next video you will deal with it. Nice work 😊
@MilanJovanovicTech
4 ай бұрын
Exactly, I'll deal with it in a future video doing exactly what you suggested. Users module will expos a public API that the Training module can call.
@barefeg4 ай бұрын
This is fine for a theoretical experiment. But in practice the split will be decided by the topology of the teams which is a reflection of the business
@MilanJovanovicTech
4 ай бұрын
Of course, this is a contrived sample
@user-du3uv6jc5x4 ай бұрын
why don`t you post the code in the video to the github?) just a simple example :)
@MilanJovanovicTech
4 ай бұрын
I'll work on a different project for GitHub, planning to release something over the summer to cover the popular architectures
@aaronbcj4 ай бұрын
shouldn't we move modules to separate solutions? even if keeping them in same solution, how about deploying them separately and reference them using nuget instead of project reference so later on it can be migrated easily to MS
@recycledsoldier
4 ай бұрын
I've worked on a project like that, and it requires A LOT of discipline from the team and generally a central architect. The reason being is that coordinating nuget updates becomes its own task. It makes the project more resilient to bad changes but comes with a lot of extra management and technical debt. It also requires a lot of coordination in regard to lower-level libraries among all projects. For instance, you have two modules, Products and Orders, they may rely on some lower-level common libraries like Security, Common, Caching, etc. that your team also manages. If you update one of those, you now have to ensure that you propagate those to all of the high-level libraries or run the risk of collision in the main monolith project. It's fine for small teams and small projects, but as the team and project complexity grow, the technical debt to manage those types of references increases. I think all larger projects should have a "keeper of the keys"/Architect as it were but not all teams get that luxury.
@MilanJovanovicTech
4 ай бұрын
Where's the monolith part then?
@aaronbcj
3 ай бұрын
I agree. Usually monoliths are not converted to MS at one go, instead follow strangler pattern to extract one module at time so both "modular monoliths" and new MS can co-exist
@sinthonseng89813 ай бұрын
Have you ever used the Managed Extensibility Framework (MEF) with a modular monolith before?
@MilanJovanovicTech
3 ай бұрын
No, I haven't
@recycledsoldier4 ай бұрын
What are your thoughts about putting endpoints into the modules as well and making the API a pure presentation/implemenation layer? That way you're not bound to the API project. We've done something similar in a recent project we released where we had to deploy to the cloud as well as an executable running on a legacy machine on prem.
@MilanJovanovicTech
4 ай бұрын
I've also done that, works great
@ripperjack76424 ай бұрын
Do Modular Monoliths have a way of communication other than using abstract Interfaces, thank you for this informative video
@MilanJovanovicTech
4 ай бұрын
Yes. I'll talk about it in another video. But you can use messaging to communicate between modules.
@Reverence123893 ай бұрын
Wouldn't having the training module reference the user module not be a best practice and break the actual modularity? What would you do in this case...extract IUserRepository and User domain into the shared kernel, leave it how you did it, or something else?
@MilanJovanovicTech
3 ай бұрын
Wait for the next video (this week), but what we want to do is have Training reference the public API of the Users module. This can be as simple as exposing an interface, that will be implemented by the Users module.
@Reverence123893 ай бұрын
How would you suggest fitting reporting into a modular monolith architecture? Reports will likely pull data from multiple modules, so maybe all reports belong in their own module, but then that report module would communicate with several other modules. You could also put the reports within the modules, but then they would have to potentially communicate to other modules. What do you think?
@MilanJovanovicTech
3 ай бұрын
The most elegant, and also most complex, approach would be publishing events and having the reporting module react to these events and update the required data. We can also implement sync calls to other modules to gather the needed data, on demand.
@Reverence12389
3 ай бұрын
@MilanJovanovicTech when you say sync calls, what do you mean? I imagine maybe something about the data from the modules that the report needs get copied and transformed into a report specific data model (ie: "sync") the data, or are you referring to something else? I'd be very interested in a video on this because I believe reporting is a requirement for a lot of projects that would justify a modular monolith architecture.
@ml_serenityАй бұрын
I'm wondering why is it still called a monolith? Because of inproc nature?
@MilanJovanovicTech
Ай бұрын
It's one deployment unit / single application
@stasnocap4 ай бұрын
Hi Milan! What keyboard are you using?
@MilanJovanovicTech
3 ай бұрын
I believe Logitech g413 carbon
@DavidM-n1f9 күн бұрын
Why do so many coders on KZread use their normal screen resolution, thinking that everyone is watching on a 4k monitor.. it's not readable on a laptop. There is a reason why most IDEs have a 'presentation mode'.
@MilanJovanovicTech
9 күн бұрын
This is the first time I hear of presentation mode, to be fair
Пікірлер: 47
Want to master Clean Architecture? Go here: bit.ly/3PupkOJ Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt
Excellent video, Milan! This is more clear for me!
@MilanJovanovicTech
3 ай бұрын
The next video should help even more
Great video Milan. Keen to see the rest of this series!
@MilanJovanovicTech
3 ай бұрын
Thanks, it's coming together coming slowly
next video should be "creating beautiful micro services app with Aspire NET" 😊
@MilanJovanovicTech
3 ай бұрын
Challenge accepted
Awesome content, thanks for all the knowledge!
@MilanJovanovicTech
4 ай бұрын
Most welcome!
Excellent video Milan! I'm looking forward to future episodes of this series
@MilanJovanovicTech
4 ай бұрын
More coming :)
Hopefully ur modular monolith course will be great.
@MilanJovanovicTech
4 ай бұрын
I'm excited. It'll end up being 12-15 hours of top-notch content. 😁
@jeremylarose5100
4 ай бұрын
If it’s anything like the other course, I can’t wait!
@MilanJovanovicTech
4 ай бұрын
@@jeremylarose5100 My opinion is this one is far better. I've learned a ton from some mistakes made on my first course.
@daveanderson8348
3 ай бұрын
@@MilanJovanovicTech If you put it like that, you're going to make it even more expensive than your other expensive course. I hope you don't set the bar high, because then there is a good chance that many people will look elsewhere!
@MilanJovanovicTech
3 ай бұрын
@@daveanderson8348 It'll be pretty similar to the other one, with a lot more content. But then again, how many other creators regularly update their existing courses or introduce new content? I don't know of many.
Nice and simple, one thing catches my eye, your Training Application module is dependent on User.Domain? Modules should share DTOs and interfaces using contracts. I guess this is a side effect of moving from monolit to modular monolit and in the next video you will deal with it. Nice work 😊
@MilanJovanovicTech
4 ай бұрын
Exactly, I'll deal with it in a future video doing exactly what you suggested. Users module will expos a public API that the Training module can call.
This is fine for a theoretical experiment. But in practice the split will be decided by the topology of the teams which is a reflection of the business
@MilanJovanovicTech
4 ай бұрын
Of course, this is a contrived sample
why don`t you post the code in the video to the github?) just a simple example :)
@MilanJovanovicTech
4 ай бұрын
I'll work on a different project for GitHub, planning to release something over the summer to cover the popular architectures
shouldn't we move modules to separate solutions? even if keeping them in same solution, how about deploying them separately and reference them using nuget instead of project reference so later on it can be migrated easily to MS
@recycledsoldier
4 ай бұрын
I've worked on a project like that, and it requires A LOT of discipline from the team and generally a central architect. The reason being is that coordinating nuget updates becomes its own task. It makes the project more resilient to bad changes but comes with a lot of extra management and technical debt. It also requires a lot of coordination in regard to lower-level libraries among all projects. For instance, you have two modules, Products and Orders, they may rely on some lower-level common libraries like Security, Common, Caching, etc. that your team also manages. If you update one of those, you now have to ensure that you propagate those to all of the high-level libraries or run the risk of collision in the main monolith project. It's fine for small teams and small projects, but as the team and project complexity grow, the technical debt to manage those types of references increases. I think all larger projects should have a "keeper of the keys"/Architect as it were but not all teams get that luxury.
@MilanJovanovicTech
4 ай бұрын
Where's the monolith part then?
@aaronbcj
3 ай бұрын
I agree. Usually monoliths are not converted to MS at one go, instead follow strangler pattern to extract one module at time so both "modular monoliths" and new MS can co-exist
Have you ever used the Managed Extensibility Framework (MEF) with a modular monolith before?
@MilanJovanovicTech
3 ай бұрын
No, I haven't
What are your thoughts about putting endpoints into the modules as well and making the API a pure presentation/implemenation layer? That way you're not bound to the API project. We've done something similar in a recent project we released where we had to deploy to the cloud as well as an executable running on a legacy machine on prem.
@MilanJovanovicTech
4 ай бұрын
I've also done that, works great
Do Modular Monoliths have a way of communication other than using abstract Interfaces, thank you for this informative video
@MilanJovanovicTech
4 ай бұрын
Yes. I'll talk about it in another video. But you can use messaging to communicate between modules.
Wouldn't having the training module reference the user module not be a best practice and break the actual modularity? What would you do in this case...extract IUserRepository and User domain into the shared kernel, leave it how you did it, or something else?
@MilanJovanovicTech
3 ай бұрын
Wait for the next video (this week), but what we want to do is have Training reference the public API of the Users module. This can be as simple as exposing an interface, that will be implemented by the Users module.
How would you suggest fitting reporting into a modular monolith architecture? Reports will likely pull data from multiple modules, so maybe all reports belong in their own module, but then that report module would communicate with several other modules. You could also put the reports within the modules, but then they would have to potentially communicate to other modules. What do you think?
@MilanJovanovicTech
3 ай бұрын
The most elegant, and also most complex, approach would be publishing events and having the reporting module react to these events and update the required data. We can also implement sync calls to other modules to gather the needed data, on demand.
@Reverence12389
3 ай бұрын
@MilanJovanovicTech when you say sync calls, what do you mean? I imagine maybe something about the data from the modules that the report needs get copied and transformed into a report specific data model (ie: "sync") the data, or are you referring to something else? I'd be very interested in a video on this because I believe reporting is a requirement for a lot of projects that would justify a modular monolith architecture.
I'm wondering why is it still called a monolith? Because of inproc nature?
@MilanJovanovicTech
Ай бұрын
It's one deployment unit / single application
Hi Milan! What keyboard are you using?
@MilanJovanovicTech
3 ай бұрын
I believe Logitech g413 carbon
Why do so many coders on KZread use their normal screen resolution, thinking that everyone is watching on a 4k monitor.. it's not readable on a laptop. There is a reason why most IDEs have a 'presentation mode'.
@MilanJovanovicTech
9 күн бұрын
This is the first time I hear of presentation mode, to be fair
Activities suddenly appeared
@MilanJovanovicTech
4 ай бұрын
Copy-paste