Тёмный

On .NET Live: Modular Monoliths with ASP.NET Core 

dotnet
Подписаться 305 тыс.
Просмотров 23 тыс.
50% 1

Опубликовано:

 

29 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 48   
@MarcStevenson-t3x
@MarcStevenson-t3x 3 месяца назад
Guy turns up late to meeting and makes a bunch of open mic noise - absolute classic meeting. Thanks Steve, this is a great resource.
@JeanQPublique
@JeanQPublique 6 месяцев назад
the best part was the desktop mic catching all the pen clicking and ambient noise. But on a more serious note, Steve's stuff is consistently great. Very grounded and practical stuff. Keep it up!
@Ardalis
@Ardalis 6 месяцев назад
Yeah, sorry about that. Some folks weren't muted who I'm sure thought they were...
@nellya4676
@nellya4676 5 месяцев назад
Thank you Steve. That was an amazing session!
@elladakku1300
@elladakku1300 6 месяцев назад
Steve is an excellent teacher. I feel like Microsoft just gave me a free DomeTrain course. Thanks.
@pedroluisrodriguezamador4871
@pedroluisrodriguezamador4871 3 месяца назад
Congratulations, well done! I'm working on a new version for modular monoliths, taking this approach into account.
@jacobkirkbride1581
@jacobkirkbride1581 4 месяца назад
This architecture does tend to work great for business applications in my experience. We’ve done so many half baked microservices attempts that end up with all of the negatives and few of the positives. This is the type of thing is a sweet spot for a lot of the types of things I have to build.
@gavincampbell1061
@gavincampbell1061 6 месяцев назад
I think the hosts need to learn some video call etiquette and ensure they're muted when they don't need to talk. And also wait for the speaker to offer up opportunities to take questions, rather than asking and breaking up the flow of the presentation. Great talk from Steve though, very informative.
@chidii
@chidii 6 месяцев назад
This is actually a good and clear session. Thanks
@FlyFisher-xd6je
@FlyFisher-xd6je Месяц назад
Excellent demo Steve!
@sushilb7994
@sushilb7994 6 месяцев назад
Thank you Steve, this was amazing!
@SajadJalilian
@SajadJalilian 6 месяцев назад
Thank you. This video is very insightful
@saqwerUA
@saqwerUA 6 месяцев назад
thanks! I catch a couple new things in .net stack I haven't thing before.
@FrantisekSidak
@FrantisekSidak 6 месяцев назад
Nice, thank you for sharing.
@tomdanielsofficial
@tomdanielsofficial 6 месяцев назад
57:50 with the BackgroundJob for sending mails: how does this behave if you scale your modular monolith out?
@marklynch6530
@marklynch6530 5 месяцев назад
I have an email sending module and I need to have email templates for different entities that are in other modules. For instance, book back in stock email template, contact author email template, confirm email template (identity) etc. which staff can define via a cms. Where would these templates go, create a record for each template in the email sending contacts project?
@uzairashraf8736
@uzairashraf8736 2 месяца назад
what if there is an existing system running and the requirement is to rewamp the project and new and old project suppose to be running together for a perdior till then whole migration will be completed. WE are to go for modular monolith but using the same DBs. without making any change to it. Do we go with Mondular monolith with same db for all the module ?
@Michel000000001
@Michel000000001 15 дней назад
I think that you can use the same db, but you should be very careful with sharing the data. In Steve's example all modules have their own database, and modules are not allowed to just 'peek' in other modules and use the other modules data. When all modules share the same database, I think it's very tempting to use your own data, and also peek into the other modules data via the database. For example when the order module gets data from the books table. You should decide which tables belong to which module, and maybe put them in separate schemas to prevent data leakage (and maybe use another db user which only has rights to it's own schema). But if you already are at that point, where tables are separated by their module, it's a short route to different databases.
@richardhaughton9633
@richardhaughton9633 6 месяцев назад
How would you integrate a blazor frontend in this modular monolith architecture? Would you add an Web API layer (BFF) to orchestrate different modules into a viewmodel?
@markcooke4866
@markcooke4866 5 месяцев назад
I would only add a BFF if it were a Blazor WebAssembly project, otherwise as long as you're just using the public contracts via mediator, there's no additional coupling.
@marklnz
@marklnz 6 месяцев назад
I dispute that a Modular Monolith is easier to deploy than Microservices. The whole point of Microservices is that they're independently deployable. If your Users service, say, requires a change then you only need to deploy that one service - nothing else is affected. If you make a similar update to a Users module in a modular monolith, then you need to deploy the entire monolith. That's really a huge drawback, if you ask me. Related, what about separating the commits from each of the different modules - you absolutely will have to do that if you have different teams working on each module, all with different priorities, deadlines, sprint/iteration schedules, etc. This also makes the development/build/CI/deployment side of things incredibly complex. So much so that I don't see how there is any benefit to a Modular Monolith at all.
@tafs7
@tafs7 6 месяцев назад
I think all those things you are bringing up are very valid points to push towards a microservices architecture, where you do have different teams working on each service with their own separate repos. The point that @ardalis was making is that everything in architecture is a trade-off. I feel that many of the comments and questions people were making during the video also were conflating this point, as they were asking things like, "but, how can I do this thing that I would do with microservices, but using mod monoliths??", and to which the answers were mostly, "well, you don't." :) Mod Monoliths are just another architectural style, and if you need it, it will fit very well with your needs as you'll be making very few tradeoffs. If you start having a lot of "friction", that means that perhaps some/all of your services would benefit from a different approach like microservices. The term "Module" and "Modular" can be very ambiguous to some, because they have past history (or might I even say, "baggage") with it. The comment about "COM" during the recording comes to mind. In a modular monolith style architecture like the one Steve shows, a module "solution folder", along with its respective module projects, is similar to just having a namespace and folders, but with a lot more rigor around coupling and avoiding spaghetti references - that is why he uses the .NET project system along with access modifiers. He even answers a question about how to ensure devs do the right thing, to which he says, "leverage code reviews, architecture unit tests, and educating your team mates to follow the proper patterns". Ok, now I'll get off my soapbox. Hope this doesn't come across as attacking but merely to add to your very valid points.
@marklnz
@marklnz 6 месяцев назад
@@tafs7 I get it, I definitely see that there's a case for modular monoliths - and I think we've both covered the obvious reason for choosing one over the other (team size/responsibility). However he did specifically call out deployment as being "easier" for Modular Monoliths and I disagree strongly with that assessment. That's all my point was really. I understand that each has its place, and I actually think that in many small to medium sized orgs, and even in some enterprises, Modular Monoliths definitely can help make things better, but they're never going to be easier to deploy than a distributed microservices architecture, unless you're deploying the entire architecture at one time.
@borislavlychezarov142
@borislavlychezarov142 6 месяцев назад
Hi from Bulgaria
@ДиванныйМонстр-ъ8с
@ДиванныйМонстр-ъ8с 6 месяцев назад
I prefer if(success) { return true; } But for this example return success; would be ok )))
@edfloreshz
@edfloreshz 6 месяцев назад
Is this project in a repository somewhere? I could really use it :) thanks
@АлексейАнтонов-ф5ш
@АлексейАнтонов-ф5ш 4 месяца назад
Mediator, mediator, it feels like it has become mainstream to use it everywhere. What other approaches exist for interaction between modules/layers?
@codingbloke
@codingbloke 6 месяцев назад
Videoconferencing 101: Mute mics not currently in use.
@polyth0n
@polyth0n 5 месяцев назад
Good presentation, but I have to say the bombardment with popups on the bottom left is really distracting. It's not particularly relevant to the topic to know where the viewers are from. Background noise isn't good either.
@br3nto
@br3nto 6 месяцев назад
There’s a fundamental flaw with the given examples, and that’s reflected in the questions asked too. I don’t think the application described is big enough to even break into separate isolated modules. A module is not the correct design here. The whole point of monoliths is to not prematurely decompose the app. The app should go through an architectural design phase where each piece of functionality is properly designed to ensure SOLID type principals first. If from that process there appears to be distinct modules, then and only then would you consider extracting modules.
@Tekner436
@Tekner436 5 месяцев назад
I don't think they are deploying this, it's an example
@gdasoft7558
@gdasoft7558 6 месяцев назад
Ardalis always surprises us with new pieces of art
@Michel000000001
@Michel000000001 15 дней назад
So you invite one of the great .NET people and you start doing something else during the meeting. You can see the eyes and faces move all over the place.
@_incarnate
@_incarnate 6 месяцев назад
Nairobi locked in. .NET FOR LIFE
@steven11101010
@steven11101010 6 месяцев назад
All you've done is shifted the composition and aggregation of data naturally present in the backend to the worst possible place - the front-end UI. For your most basic screen in any ecommerce app, you'll be calling nearly every modules' APIs just to get one view. The fact this demo intentionally excludes that piece of the puzzle is revealing. This choice of architecture necessarily mandates another state store in the UI. Which brings a host of complications and makes your UI now a ball of mud. I get it's all tradeoffs. But excluding that vital layer from the presentation altogether doesn't present a balanced picture of what those trade offs actually are.
@JeanQPublique
@JeanQPublique 6 месяцев назад
I think you've missed something. In a microservices setup you might have a "backend for frontend" or "gateway api" service that does this composition and aggregation you want. There's nothing stopping you from having the same "query service for frontend" module in this modular monolith.
@steven11101010
@steven11101010 6 месяцев назад
@@JeanQPublique Who said anything about a microservice?
@JeanQPublique
@JeanQPublique 6 месяцев назад
@@steven11101010 I did when I suggested the solution to your problem already exists in the microservices world and can be easily adapted to the Modular Monolith world. Just to be explicit: The problem you raise is solved in the Microservice world by using Gateway APIs or a Backend for Frontend. Essentially, something responsible for doing the "composition and aggregation of data", as you put it, instead of the UI. In the Modular Monolith world you could assign this responsibility to a dedicated module. Same solution, different context.
@JeanQPublique
@JeanQPublique 6 месяцев назад
@@steven11101010 I did when I suggested the solution that works in a Microservices context would also work in a Modular Monolith context. Specifically: In the MS context we sometimes use a "Backend for Frontend" or "Gateway API" to, as you put it, handle the "composition and aggregation of data." In the MM context a dedicated module can be created to handle this responsibility.
@Ardalis
@Ardalis 6 месяцев назад
@@JeanQPublique Precisely. A BFF would be present for any SPA or mobile client application that might consume these APIs, and it's there that you would be sure to have efficient and well-factored endpoints in place dedicated to this or that client screen/page/control's needs.
Далее
.NET and C# are in trouble. Here is what I'd do.
10:57
МЖ. Может, папа - ты? 16.02.2023
40:03
Просмотров 113 тыс.
Clean Architecture with ASP.NET Core 8 | .NET Conf 2023
29:17
DHH discusses SQLite (and Stoicism)
54:00
Просмотров 94 тыс.
Brutally honest advice for new .NET Web Developers
7:19