How to Structure a Modular Monolith Project in .NET

  Рет қаралды 41,071

Milan Jovanović

Milan Jovanović

Күн бұрын

Пікірлер: 154
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Want to master Clean Architecture? Go here: bit.ly/3PupkOJ Want to unlock Modular Monoliths? Go here: bit.ly/3SXlzSt
@maxpuissant2
@maxpuissant2 Жыл бұрын
This is probably the last step before passing into Microservice Architechture. Best to use it if you're right on the edge of creating separate teams to develop the project. A bit too much separation of concerns if you have a small application. For example, projects Domain/Application/Infrastructure could be all in the same project and only separated by folders, messaging between countext is also very strict in this case and adds a lot of overhead, resulting in difficult/painful to change. So I would say, don't start with this if you're not sure of your bounded context and event generated.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
This sample project is a bit dogmatic, I have to say. I'm working on a video series with an improved architecture that should be coming out in a few weeks
@Eugene.Golubev
@Eugene.Golubev Жыл бұрын
Having layers in one project would mean zero isolation between them, which could lead to some programmers referencing between layers in a wrong way. Watching over them would be a pain
@maxpuissant2
@maxpuissant2 Жыл бұрын
@@Eugene.Golubev it's sad if you don't trust your programmers at this point.
@Eugene.Golubev
@Eugene.Golubev Жыл бұрын
@@maxpuissant2 people make mistakes. If you can prevent them technically, then you should do it. It's like programming in dynamic instead of static languages
@maxpuissant2
@maxpuissant2 Жыл бұрын
@@Eugene.Golubev I don't believe you make that mistake by error but if you want a safety net you should write a test, it will be more flexible and explicit.
@igortalic2021
@igortalic2021 9 ай бұрын
Cool video :) Nice to see this architecture coming back, 10+ years ago when I was doing PHP, there was a phase where frameworks were moving from MVC to so called HMVC, which was a similar concept and idea. Sadly microservices took over, nice to see somebody pushing this again :)
@MilanJovanovicTech
@MilanJovanovicTech 9 ай бұрын
I've been using it for a few years. I wish it was more popular, but I'm also seeing a lot of chatter on this topic, so things could change.
@joudawad1042
@joudawad1042 Жыл бұрын
Great video Milan this is exactly what i was looking for as i was doing my own Modular Monolith project and i needed some answers on how to handle some stuff in it, and you did indeed answered me with this video great content and i hope that we can see more about this topic in next weeks
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I'm definitely planning more about this topic
@pablolopezponce
@pablolopezponce Жыл бұрын
Great content Milan! I've been implementing this architecture myself and got to a very similar solution structure. The main difference is that your "IntegrationEvents" project is my "Contract" project. That includes not only integration events, but also the definitions of commands and queries. This allows me to query specific data from a different module in a clean and decoupled way, without the need of making the local copy using integration events. I use it when the query is not frequent, otherwise I stick to your approach of duplicating the data using events. I don't currently use it for commands (prefer event+subscriber for that) but I don't see why I couldn't. It's the module public API after all. I also tried the railway architecture you are using here but eventually got back to using exceptions and filters. I couldn't see the gain and all the bind,tap,map makes the code less readable, not more.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
FP and ROP isn't for everyone. Curious what you're using to implement queries/commands? MassTransit request/response or something else?
@pablolopezponce
@pablolopezponce Жыл бұрын
@@MilanJovanovicTech Right now I'm good with Mediatr, but I hide it behind an ICommandBus and IQueryBus just in case I need something else in the future.
@fernandocalmet
@fernandocalmet Жыл бұрын
Hi Milan! This is what I was waiting for. I greatly appreciate this video, which has helped me significantly clarify some doubts. I hope you continue uploading more videos about how you implement the concepts of CA and DDD in different architectures. Greetings!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Planning to do more work into Modular monolith
@dddavet9652
@dddavet9652 10 ай бұрын
Modular is a great way to separate domains within the same monolith, and we can constrain direct access to domain models through assembly properties. Also, another positive thing is even though you are running monolith locally you exclude certain modules that are not dependant from your module and thus cut the build time.
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
You gave me an idea there. Might explore the exclusion part for a future video
@dddavet9652
@dddavet9652 10 ай бұрын
@@MilanJovanovicTech great to hear that. Keep on producing great content. Really love watching and following your new videos.
@kjhjkhuih
@kjhjkhuih Жыл бұрын
I understand the concept, but I’m curious about four things: 1. In the database design at 10:11 how would a customer register for a training be stored? Can I store the userId in the trainings module? 2. How to handle a database transaction, where at least two modules must do something before persisting 3. How to split off a module into a micro service 4. How many endpoints on average would be the maximum size of a module? Thank you for the video
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
1. Yes, you can store the UserId (or Client - as it's referred to in that module) 2. No cross-module transactions. You treat them as separate transactions. 3. Pull the code out, add a reverse proxy, done. 4. No such metric, you decide
@vasiliioleinic
@vasiliioleinic Жыл бұрын
Nicely done, I love seeing a different view to seemingly the same topic :)
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Glad you enjoyed it! I'll be covering MM a lot more in the coming weeks/months
@kodindoyannick5328
@kodindoyannick5328 10 ай бұрын
Awesome about modular monoliths structure. Thank so much.
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Glad it was helpful!
@mohamadmmm1481
@mohamadmmm1481 Жыл бұрын
Thank you for your amazing content. If you have the time, I would be grateful if you built a complex library containing a lot of abstractions, so we can see a good example of modeling. Thank you for your time.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Going to release some sample applications to GitHub next year
@cicerofoscarini8890
@cicerofoscarini8890 10 ай бұрын
Hi! What would be the alternative for communication between the modules? If I do not want to use message bus, what else could I use? Thank you.
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Good ol' method calls
@cicerofoscarini8890
@cicerofoscarini8890 10 ай бұрын
@@MilanJovanovicTech In different application :P
@sunzhang-d9v
@sunzhang-d9v Жыл бұрын
Is it hard to understand that inter-module communication through integrated events?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
www.milanjovanovic.tech/blog/modular-monolith-communication-patterns
@JoseAlvarez-dl3hm
@JoseAlvarez-dl3hm 4 ай бұрын
It looks like really worth diving into and buying his course, even though it is a bit expensive here in Mexico, but it is worth to save for it. For now it looks really difficult to understand the example since it is one quite complex, a very simple one would have been nice.
@MilanJovanovicTech
@MilanJovanovicTech 4 ай бұрын
Hey Jose, send me an email and let's get you enrolled in that course.
@SuperMarcotorino
@SuperMarcotorino Жыл бұрын
Hi Milan! In the Pragmatic Clean Architecture course, is the solution structured as a Modular Monolith?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
PCA is just a single module. I'll release a separate course dedicated to Modular Monoliths, with various architectural approaches inside
@lcordoba100
@lcordoba100 Жыл бұрын
@@MilanJovanovicTech waiting for the course, planned dates?
@ricardoemanuelreyesramirez4676
@ricardoemanuelreyesramirez4676 11 ай бұрын
I love the modular monolith solution! Could you make a video about injecting dependencies into modular monoliths without using autofac, please?
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
This isn't Autofac though
@adrien8768
@adrien8768 Жыл бұрын
Hello :) create user trigger one event and return the user. Then you make bind tap ... for validation. But if this user is not valid you return errors but the event is allready save ?,
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Check out some of my videos about Railway-Oriented Programming to understand how this works
@mouradaissani8957
@mouradaissani8957 11 ай бұрын
Thank you Milan, great content, i would love to study in dept your source code, can you guid please where to find/buy it?
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
I share the source code on Patreon: www.patreon.com/milanjovanovic
@mouradaissani8957
@mouradaissani8957 10 ай бұрын
this link is somehow inaccessible @@MilanJovanovicTech
@Ricky-fl1eo
@Ricky-fl1eo 10 ай бұрын
How are integration event handlers registered? Is there a section of code that registers a particular integration event with one or more handlers that are interested in this event from other modules?
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Yeah, just call AddConsumer from MassTransit
@2u1u
@2u1u 10 ай бұрын
@milan, you've mentioned communication between modules is done via an inmemory bus provided by masstransit, which is fine for a fire and forget, but can you explain how we'd go about the retrieval of data from a module. example, module A needs data from module B during the execution time within a method in module A. without direct calls, I cannot see how a pub/sub implementation would work in this scenario
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Have I got a video for you 😁 Check this out: kzbin.info/www/bejne/hJvWoKyherSeqM0
@seNick7
@seNick7 3 ай бұрын
"which is fine for a fire and forget" - it's not fine. You will lose all your events in case of reboot or crash. Async communication in a monolith is very hard. You need outbox pattern and idempotency on the input and all other complexity borrowed from microservices.
@Pistolen84
@Pistolen84 Жыл бұрын
Hello. Great video as always! Have u tired fast endpoints? If yes, Whats ur take on it?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Releasing a video about it soon
@boban.stojanovski
@boban.stojanovski 11 ай бұрын
Good intro to structuring modular monoliths. Love the video thumbnail 😂
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Had to get creative with the thumbnail. Unless Rubik's cube sues me... You never know.
@abuzeralaca
@abuzeralaca Жыл бұрын
Hi Milan, as always, great content. I was wondering how I could get the code and inspect on my own. Could you please share information about that?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
www.patreon.com/posts/how-to-structure-92696857
@aminsaadati3809
@aminsaadati3809 9 ай бұрын
How did you use Bind and Tap Extension method after Create method ?
@MilanJovanovicTech
@MilanJovanovicTech 9 ай бұрын
Check this out: kzbin.info/www/bejne/mnXEpHSjpNx5qtU
@cloudwoofer
@cloudwoofer 10 ай бұрын
If you don't mind me asking Milan, how would you handle exposing such a monolith if one needs an auth server (like aws cognito or identity server from duende), email service like SendGrid, payment service like Stripe ... would you put upfront, before the frontend, a gateway of sorts (just like for microservices) and reroute calls to those services and make them external APIs talking to your database ... or would you create modules for those and also put them inside this monolith ? I never see anyone discussing Gateways and Modular Monoliths, but just because you have a modular monolith does not automatically imply all your apis and services should be inside of it I assume ... ? I'm a bit lost here on what I should do. I expect up to 100 EF queries (GraphQL queries) per second so I cannot say this is such a huge project that I would need microservices, but not too small either. And I like having a gateway that can do rate / ip limiting and also add correlation IDs ... but to me it feels like that App project is a gateway on its own :D Please help answer this pleb xD
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
But these are all third-party APIs, right? You typically call them using HttpClient or using an SDK if it's provided. Which is why this part sounds confusing: "would you put upfront, before the frontend, a gateway of sorts (just like for microservices) and reroute calls to those services and make them external APIs talking to your database" I'm recording a bunch of Modular monolith videos this month, and I'll make sure to cover gateways P.S. Help me clear up my confusion, and I'm sure I could help
@cloudwoofer
@cloudwoofer 10 ай бұрын
Not sure if I should call them 3rd party, since they are APIs I will build from scratch for my pet project that indeed wrap the 3rd party sdks from the respective cloud offerings like stripe or sendgrid. I just wish I knew how to approach hiding frontend communication to the backend services from users (clients), by only exposing a gateway … when it comes to “modular monoliths”. Or perhaps it would imply a mix of microservices (gateway, auth, email svc) and modular monolith… Loved your Pragmatic Clean Architecture Course btw 🎉 Looking forward to your vids! Cheers!
@mohammedabdalla6452
@mohammedabdalla6452 Жыл бұрын
What do you think about abp framework ?
@fredyboy162
@fredyboy162 Жыл бұрын
why my previous comment has been removed about Fullstackhero ?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
YT deletes comments sometimes
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I think it's a nice place to start - if you can get past the learning curve
@fredyboy162
@fredyboy162 Жыл бұрын
@@MilanJovanovicTech thanks Milan, maybe because I added a link to Github
@johncarloadvincula6022
@johncarloadvincula6022 6 ай бұрын
Hi @Milan, Thank you for this kind of video, For modular monolith how do you deal with UI / Pages of a web app that has datas that getting on multiple modules? A sample page is displaying a listing of added cart items but on the same page Im also displaying the user information like name, address, mobile number etc.
@MilanJovanovicTech
@MilanJovanovicTech 6 ай бұрын
You can send multiple API requests when loading the page
@johncarloadvincula6022
@johncarloadvincula6022 6 ай бұрын
@@MilanJovanovicTech thank you for your insight. In typical MVC that will use modular approach, is it correct to do composite ui? for ex. component ui that present in modules(cart and profile) then consume it to host application (Pages/Cart.cshtml)
10 ай бұрын
It would be great to download/access the solution or at least the skeleton of it. Is it available somewhere? Thank you!
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Right now, only on Patreon
10 ай бұрын
That's great! Is the silver level enough for that?
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
@ Yes, of course
@arteqppp6223
@arteqppp6223 11 ай бұрын
At what level of my career should I be familiar with all of that? Is this mid, or senior level?
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
I guess mid/senior level
@sherifelsayed3007
@sherifelsayed3007 Жыл бұрын
Can you add another API project in the same solution ?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Why not?
@drkls00014
@drkls00014 9 ай бұрын
Which lib is that who uses Tap and Bind stuff?
@MilanJovanovicTech
@MilanJovanovicTech 8 ай бұрын
Custom stuff, built around the Result monad
@ramax495
@ramax495 Жыл бұрын
You say that it is used MassTransit with memory transport. But later you show database tables for inbox/outbox and event handling. Is they part of MassTransit ? Does MassTransit always use db tables despite the way of transport messages ?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No, those are custom inbox/outbox tables
@MrRKYDA
@MrRKYDA Жыл бұрын
Great video, if I understand correctly, is a module essentially a microservice, except that all modules share a common process?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Wrong way to look at it - but yeah, if it suits you 😅
@addiadriano
@addiadriano Жыл бұрын
Thanks for your great content! I would be really interested in an example of the modular monolith approach with the vertical slice architecture. Also, would you recommend to start with the vertical slice architecture in a new project and with a team, that has not much experience with modular monoliths yet?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
The two aren't mutually exclusive, nor do they require each other. You can definitely start with VSA. Modular monolith is more about solving the interaction and coupling between modules.
@jawadahmed-j6d
@jawadahmed-j6d Жыл бұрын
hey milan! please a video on how to fetch nested data while executing raw sql or stored procedures.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Will see
@yugo6243
@yugo6243 Жыл бұрын
Thank you for a such halpfull video. Could you please share the code used in this video and attach the link to it under the video? It would be very useful to examine it.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
www.patreon.com/posts/how-to-structure-92696857
@reth9106
@reth9106 11 ай бұрын
Hi Milan, i think i am too late to ask something, but i have one question about how to organize the modules using ddd. So, i have bounded context, let's say catalog, within this bounded context has 3 sub-domains inventoryManagement, catalogManagement and princing. My question is, each of these sub-domains should be a module? If we use clean architecture, each of these sub-domains should have it's own domain, application and infra layers?
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
It's never too late on my channel :) If they're the same bounded context, I would keep them inside a single module.
@z-virusplayer9547
@z-virusplayer9547 11 ай бұрын
​@@MilanJovanovicTech Hi, If my bounded context is large and has 10 aggregates, is it a sign i'm doing something wrong or it's normal and i should put all those entities on the domain folder of that bounded context?
@reth9106
@reth9106 11 ай бұрын
@@MilanJovanovicTech thanks
@nimaghajari
@nimaghajari 8 ай бұрын
please publish this sample code milan
@MilanJovanovicTech
@MilanJovanovicTech 8 ай бұрын
For now, Patreon only
@tanjeerhaque3800
@tanjeerhaque3800 Жыл бұрын
Hi @Milan, very nicely put all things together. I have one question, instead of one executable to expose endpoints of all modules, can't we separate the executables as well per modules? There will be multiple API applications in that case, it might distribute the loads as well. Will it be still monolith if not what it calls?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Would not be a monolith anymore
@tanjeerhaque3800
@tanjeerhaque3800 Жыл бұрын
@@MilanJovanovicTech But we still have one data source/database, right? Shouldn't it still be a monolith? Am I missing something?
@dandoescode
@dandoescode 11 ай бұрын
How your persistent your data doesn't make something a Monolith. Having one one executable does.
@marcomeneghini323
@marcomeneghini323 9 ай бұрын
do you have this code in .net 8 version?
@MilanJovanovicTech
@MilanJovanovicTech 9 ай бұрын
No this one, but there's nothing different in .NET 8 (no breaking changes)
@romualdojunior2121
@romualdojunior2121 11 ай бұрын
Love the logo 😂
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Yeah, pretty original if I may say so. Quite a thing of beauty.
@romualdojunior2121
@romualdojunior2121 11 ай бұрын
just Keep the great job man @@MilanJovanovicTech
@SachinDewan12
@SachinDewan12 Жыл бұрын
Hi millan thanks for nice video, will you be upgrading your clean architecture course in .net8
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Yes, some updates coming in January. Subscribe to my newsletter to get notified! It won't be just .NET 8 - there will be new chapters and some re-recordings
@vincentcifello4435
@vincentcifello4435 Жыл бұрын
Thanks for this. Clearly, there was a lot of work involved. It is a nice reference that brings in messaging, functional programming, layers in slices, etc. Unfortunately, the entire purpose of Modularization and Bounded Contexts has been completely obviated by the massive duplication of data maintained in the 2 database schemas. Using integration events to couple Modules and Bounded contexts is odd. Common, but odd. What is the reason for creating this coupling?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Duplication allows the modules to exist independently
@vincentcifello4435
@vincentcifello4435 Жыл бұрын
@@MilanJovanovicTech With all due respect Milan, that makes zero sense. It is precisely the fact that they duplicate and sync data that makes them completely dependent. That's what coupling is. That's what dependence is. Perhaps, I am misunderstanding something you are doing. Why do you need FirstName, LastName, email in both services?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
@@vincentcifello4435 I look at it from a perspective of a single module. It has all the data it requires to function. It can continue functioning even if the other module is down/unavailable. Disregard for a moment that the modules are publishing integration events to pass around this data. Having said that, this is an example project where I purposefully pushed some things to the extreme. So look at it from that perspective also.
@MiningForPies
@MiningForPies 11 ай бұрын
@@vincentcifello4435 I think you have a fundamental misunderstanding of the concept of coupling.
@vincentcifello4435
@vincentcifello4435 11 ай бұрын
@@MiningForPies huh? If you change the FirstName field in User from 50 characters to 80 characters, then you have to change the FirstName field in Trainers. That is coupling.
@jancarius101
@jancarius101 11 ай бұрын
Stay Awesome?! That's serpentza's tag line!
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
Ok
@paolotosetto1930
@paolotosetto1930 Жыл бұрын
Where is the link to download the code of the project?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
www.patreon.com/posts/how-to-structure-92696857
@Hello_there_777
@Hello_there_777 Жыл бұрын
hi! do you receive a crypto for share source code examples?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No, sorry
@TheAzerue
@TheAzerue Жыл бұрын
Hi Just recently started your videos. Great content. A couple of questions 1. Do you always use DDD in all the projects ? Or that depends on specific use case. If yes then what will be those 2. I saw you used UserPermission. ReadUser or UserPermission. ModifyUser, these are string constants as i saw. Are you saving these permission in some kind of token like cookie or jwt. Just a thought wont it make a token very large with all the permissions or if it is saved in Db then it will suffer from performance as it puts more load on database.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
1. Context-dependent - but I do tend to use it in my examples 2. I showcased this in a separate series: kzbin.info/www/bejne/apSpmYyLgJ2qpMU You can simply query the permissions based on the User ID when the API is called, and store the values in a cache for quick retrieval in the future.
@hotdota2
@hotdota2 Жыл бұрын
Nice video! But absolutely complicated structure for me 😅, looks a bit similar to Redux concept
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Well this is pretty advanced, and most project won't need this
@kristianaranda
@kristianaranda Жыл бұрын
Great!
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Thank you :)
@iamorhanmir
@iamorhanmir Жыл бұрын
Hi Milan Some of your subscribers are from India. And i am also from India. In India we are not able to get access on Source Code. As in our country patreon is not working. Any other way to share the source code with us. So we can clearly understand the flow and other things. Humble request pls do something for us.
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I'll release something on GitHub soon
@iamorhanmir
@iamorhanmir Жыл бұрын
@@MilanJovanovicTech Thank you ❤️❤️☺️
@vasiliylu8054
@vasiliylu8054 Жыл бұрын
Спасибо, бро
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
Нема на чему!
@ravikumarmistry
@ravikumarmistry 10 ай бұрын
It would much easier if we only have 2 projects per module. Module itself and contracts. Much easier to manage when you have large number of modules
@MilanJovanovicTech
@MilanJovanovicTech 10 ай бұрын
Sure, you can do that
@Termit2009
@Termit2009 11 ай бұрын
Still your modules use Infrastructures from others... Anyway, thank you for sharing
@MilanJovanovicTech
@MilanJovanovicTech 11 ай бұрын
No they don't? 🤔
@stephendgreen1502
@stephendgreen1502 Жыл бұрын
All of this code, albeit well engineered, is really to replace the same kind of functionality which in a database-centric system would be one or two stored procedures. It is a lot of overhead. Each project might have to have physical project files and folders residing at top level within an overall solution folder in the file system and the more projects and modules there are the more subfolders there will be in that solution folder. How scalable is this, do you think?
@RaMz00z
@RaMz00z Жыл бұрын
Stored procedures are unmaintainable. Database centric systems are unmaintainable. Avoid them at all cost. There is a reason it is *far* from the norm nowadays.
@stephendgreen1502
@stephendgreen1502 Жыл бұрын
@@RaMz00z Subjective
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
I get where you're coming from, but this is more about logical separation and organization within a monolith. While keeping track of inter-module dependencies and database dependencies. It's actually a very "pretty" way to develop systems. And scales well, since you can easily move into microservices.
@stephendgreen1502
@stephendgreen1502 Жыл бұрын
@@MilanJovanovicTech How do you distinguish logical and physical? I would suggest there be a way to provide logical modules with less overhead and better scalability. At the moment it requires either under-documented, rather obscure Assembly files with multiple Assemblies defined in same file, or, more normally, separate projects compiled into separate DLLs.
@sunzhang-d9v
@sunzhang-d9v Жыл бұрын
Is this a microservice? What are microservices?
@MilanJovanovicTech
@MilanJovanovicTech Жыл бұрын
No, it's a monolith
@dotnetMasterCSharp
@dotnetMasterCSharp 2 ай бұрын
This is awesome and useful content thank you. I am a Strong Junior developer. Can you help me if I ask you for help with the architecture of my projects? How can I contact you?
@MilanJovanovicTech
@MilanJovanovicTech 2 ай бұрын
Sadly, I don't have the capacity for such work :)
@dotnetMasterCSharp
@dotnetMasterCSharp 2 ай бұрын
@@MilanJovanovicTech Ok thanks
Modular Monolith - How To Create Your Modules
12:15
Milan Jovanović
Рет қаралды 14 М.
Getting Started with Modular Monoliths in .NET
12:37
Milan Jovanović
Рет қаралды 27 М.
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН
Beat Ronaldo, Win $1,000,000
22:45
MrBeast
Рет қаралды 158 МЛН
IL'HAN - Qalqam | Official Music Video
03:17
Ilhan Ihsanov
Рет қаралды 700 М.
Don't Use Polly in .NET Directly. Use this instead!
14:58
Nick Chapsas
Рет қаралды 74 М.
The Right Way To Build Async APIs in ASP.NET Core
20:12
Milan Jovanović
Рет қаралды 21 М.
Microservices Architecture - Implementation with Example - Part 1
3:18
Five Minute Tech
Рет қаралды 38 М.
Modular Monoliths: How To Build One & Lessons Learned
43:37
Milan Jovanović
Рет қаралды 52 М.
How To Build Loosely Coupled Microservices With MassTransit
23:01
Milan Jovanović
Рет қаралды 39 М.
Software Architecture: The Hard Parts - Neal Ford
57:05
Developer Summit
Рет қаралды 12 М.
Implementing the Transactional Outbox Pattern from Scratch
24:27
Milan Jovanović
Рет қаралды 11 М.
Distribu-ready with the Modular Monolith - Layla Porter - NDC London 2024
57:25
Modular Monoliths • Simon Brown • GOTO 2018
46:32
GOTO Conferences
Рет қаралды 97 М.
2 Best Practices for Returning API Errors in ASP.NET Core
12:39
Milan Jovanović
Рет қаралды 29 М.
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН