CQRS using C# and MediatR

  Рет қаралды 32,827

Jono Williams

Jono Williams

Күн бұрын

Пікірлер: 134
@shubhankarpaul2740
@shubhankarpaul2740 2 жыл бұрын
What a Tutorial man !!! Crisp and sharp and no bullshit ... Love you Bro !!!
@blablin
@blablin 2 жыл бұрын
I have just changed my job and jumped from 10 year old .NET project to the modern ones. I am totally overwhelmed by all of the abstraction going on. This video really helped me to grasp the approach our seniors used to get the project going. Thank you so much.
@matheusrodrigues4375
@matheusrodrigues4375 3 жыл бұрын
Dude!!!! I'm pretty sure you won't read this comment. But I gotta tell you, this tutorial saved my carrer!!!!!! I was about to lose hopes on understanding this kind of architecture!!! And after watching this, I can even explain to other people how this thing works!!! Thanks a lotttt, hugs from Brazil!!!!! KEEP UP THE AWESOME WORK!!!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
I read all my comments! I’m really glad this helped. Thanks heaps for the support 👍
@zakariabenmassaoud
@zakariabenmassaoud 3 жыл бұрын
Really the best cqrs video! Adding records is the most clean thing! Thank you again!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Glad you liked the video 👍
@niroshanmanoharan4295
@niroshanmanoharan4295 3 жыл бұрын
A time-saving video. great informative video. Thank you!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks a lot !
@CarlosVasquez-ff5yj
@CarlosVasquez-ff5yj Жыл бұрын
With this video I did understand the CQRS principle. Many thanks.
@Aryevang
@Aryevang 2 жыл бұрын
Short and simple. Just what I needed.
@WikkiOnIlluminati
@WikkiOnIlluminati 3 жыл бұрын
This the only "ONE" best video which explain in simple way about CQRS. Impressive and keep it up
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks heaps ! Appreciate the positive feedback
@whoiam6395
@whoiam6395 3 жыл бұрын
Such a great guide! Super easy explanation & also I do like that you are showing how to use the new C# 9 features!!! AWESOMEEE THANKS!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Glad you liked it 🤙
@paikesitics
@paikesitics 3 жыл бұрын
7:02 The building blcok (my bookmark)... thank Jonathan!
@ashbjorn
@ashbjorn 3 жыл бұрын
Thanks a lot Jona for the clear video without diving in to too much abstraction right away! Been wanting to try out this patterns for a while but always bailed out because it felt 'heavy' to get in to, this video shines a different light, cheers for that mate. One small comment I had when you brought up the Read vs Write DB consideration, is to utilize the option to separate the Read and Write queries through connection strings, by setting the 'Application Intent' property to 'ReadOnly'. This is especially prevalent when dealing with scaled instances where you can have access to a dedicated read-only copy (node) of your (master) database. Granted not everyone will be running Availability Groups, but this setup at least takes care of the 'syncing' automatically and can help a lot by not having to deal with row or table locks etc. (Sorry if this is a bit much).
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Hey Ashbjorn, thanks for the positive feedback ! I really appreciate it. In regards to your questions about separating your read database and write database. So for example if your application is very read heavy you might have a read database which has a very de-normalised schema in order to avoid having to join on multiple tables etc to make queries as fast as possible. But on the write side, it’s normalised and doesn’t have any redundant data. The issue is trying to keep the read database in sync with the write database. A common solution is to use events, they can be in memory using MediatR or via an event bus such as RabbitMQ. So when the write database gets updated, an event will be published and an event handler will handle the event and update the read database accordingly. Hope this answered your questions 👍
@tyaramis
@tyaramis 3 жыл бұрын
The best video about CQRS that I have watched sofar.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Appreciate the positive feedback!
@redmizaki5838
@redmizaki5838 3 жыл бұрын
Thank you so much bro! I really wish you carry on with the separate databases thing you mentioned in the beginning.
@donmikkodanm.olmillo8154
@donmikkodanm.olmillo8154 3 жыл бұрын
Thank you for this one! It really helps me a lot, especially on my work. I'm still a very new beginner towards .NET 5 and Web API. Kudos to you Jonathan!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks for the positive feedback
@JoeyBob112
@JoeyBob112 3 жыл бұрын
Really enjoying these tutorials. Presentation style is on point, I totally follow whats happening and why. Thank you :)
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks heaps ! Glad you like the videos !
@athul9436
@athul9436 3 жыл бұрын
Awesome 👍👍. I have tried multiple other videos to understand the concept and this is the only one I found simple enough to feed my dumb brain
@vachm666
@vachm666 3 жыл бұрын
Good job man, I was looking for something easy to digest for my jr developers.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks a lot ! Glad it helped
@AjithKumarRS
@AjithKumarRS 3 жыл бұрын
just watched all videos in this channel.. you deserve more subscribers.. you'll be there soon. :) keep these videos coming...
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks a lot ! I just need to be more consistent with making videos 😂
@AjithKumarRS
@AjithKumarRS 3 жыл бұрын
@@jonowilliams26 please add design patterns to your videos list if possible.
@oopcoders9377
@oopcoders9377 2 жыл бұрын
This is a really well made video. Very easy to follow along.
@olaamigoify
@olaamigoify 3 жыл бұрын
Nicely done. Clear and concise. Gracias.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Glad you liked the video !
@bunnybbyboo
@bunnybbyboo 3 жыл бұрын
Your setup is so clean :0
@Scott-oe7dv
@Scott-oe7dv 2 жыл бұрын
I wish you'd make more videos, your way of teaching is amazing!
@Abdullah_khan333
@Abdullah_khan333 3 жыл бұрын
so simple, easy to understand in minutes instead of hours. subscribed. 👍
@Suecia2020
@Suecia2020 2 жыл бұрын
Excellent travail .... maintenant j'ai pu le comprendre merci
@athuljk2645
@athuljk2645 8 ай бұрын
Explained in detail and Thanks a lot !!
@deivid77
@deivid77 3 жыл бұрын
Love MediatR!. It's so clean & easy. Thank you for the video.
@cnikolov
@cnikolov 3 жыл бұрын
Awesome, this is actually the first thing I thought about when I saw the record feature, with mediatr it was a bit of a pain in the past to map the objects correctly
@mcnielviray
@mcnielviray 3 жыл бұрын
I loved the practice you pointed out .. I will definitely implement the practice for code discoveranility. Thanks
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Glad it helped 👍
@georgeq5042
@georgeq5042 3 жыл бұрын
Hello Jonathan! Thanks a lot for the great video! It is very accurate and easy to follow.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Appreciate the positive feedback 👍
@ajithkamath9824
@ajithkamath9824 3 жыл бұрын
Thanks for the short and informative video😊
@udaymadanu
@udaymadanu 3 жыл бұрын
Best tutorial on CQRS!
@mrcarlpaton
@mrcarlpaton 3 жыл бұрын
Thank you Jonathan, that was real simple to follow!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thank you ! Appreciate the positive feedback
@JoelBritos
@JoelBritos 3 жыл бұрын
Great video, It helped me to finally understand how CQRS works
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Glad you like it 👍
@jadenrogers3133
@jadenrogers3133 2 жыл бұрын
Great video, clear and to the point. I like the way you structured it, the result / command / query are nested in the static class reducing the amount of custom dtos floating around which always felt off to me. Where to you come down on structuring the repository / unit of work. Generic repositories always felt "wrong" due to the discoverability issue that you mentioned. How does someone know IRepo actually works vs say uow.Todos.Add, uow.Orders.Find or ITodoRepo etc.
@dipjyotisikder3586
@dipjyotisikder3586 2 жыл бұрын
Thanks a lot jonathan. Its a great video! You saved too much of my time.
@maartenmateusen8057
@maartenmateusen8057 3 жыл бұрын
Thnx for the video! Great stuff.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thank you !
@kj2w
@kj2w 3 жыл бұрын
Loved this video. The statement of '...And what that means is just separating your reads from your rights (kzbin.info/www/bejne/o5Xddn59oa1jlbM)' is where the mental light bulb for CQRS FINALLY turned on for me. It did through me for a loop when I saw date of '30/12/2020'. I was thinking for a split second 'Hmmph, I guess Australia has 18 more months than here'.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks a lot ! Appreciate the positive feedback!
@nallaperumalthanthondri3817
@nallaperumalthanthondri3817 2 жыл бұрын
Concise and nice tutorial
@sametcekiny
@sametcekiny 3 жыл бұрын
The best and clear. Thank you!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Glad it helped!
@psadlkfpsk
@psadlkfpsk 3 жыл бұрын
Great introduction man, thanks a lot. Subbed!
@zengasiwingwa3408
@zengasiwingwa3408 3 жыл бұрын
Very well explained, keep it going!
@jaydeepvomexchandra
@jaydeepvomexchandra 3 жыл бұрын
Would have loved if you covered a sample unit test but it was a great tutorial.
@AjithKumarRS
@AjithKumarRS 3 жыл бұрын
Such a good one. editing is awesome 😍.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thank you !
@jouchiwinchester2666
@jouchiwinchester2666 2 жыл бұрын
really enjoying your tuts, haha also the your voice is like dean winchester hahaha
@emnclm298
@emnclm298 3 жыл бұрын
Awesome tutorial Mate! Mind you do a video how to unit test cqrs/mediator pattern?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks for the positive feedback ! I really appreciate it ! I will add it to my backlog. But I have had multiple requests for it so might come out sooner rather than later 👍
@marshallnyamadzawo8553
@marshallnyamadzawo8553 3 жыл бұрын
Wow...this is too juicy. Thank you!!
@rojovel
@rojovel 3 жыл бұрын
Fist of all great video!!! Just some observation about CQRS. I don't see a real benefit if we use a well coded services layer. Maybe it's something I'm missing about the CQRS whole idea.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Appreciate the positive feedback! I think the best way I have heard it described is “putting developers into the pit of success.” So using this will help align all developers in the team to follow the request, handler and response pattern. And no doubt you can do the same thing without MediatR and get the same benefits of CQRS (single responsibility and independently evolving) but it will require a well documented coding standard so everyone is on the same page. Hope this helps 👍
@shaikzuhair8537
@shaikzuhair8537 2 жыл бұрын
Great explanation
@jomarcordero4515
@jomarcordero4515 3 жыл бұрын
Excellent explanation thanks! Just missed to await the LINQ query with the async extension methods like: FirstOrDefaultAsync() , AddAsync(), etc... var todo = await repository.Todos.FirstOrDefaultAsync(x => ...); otherwise it will work synchronously.
@ivanmiroshnichenko4299
@ivanmiroshnichenko4299 2 жыл бұрын
As my hobby, I've been getting the hang of English accents. You have an interesting one. What is part of the world you're from? My guess is south of the UK? But I'm a noob at that. I'm sorry if it was awkward of me :|
@AbPSlayer367
@AbPSlayer367 3 жыл бұрын
Very interesting in using static class as wrapper around a single responsibility handler, command/query and responses instead of separate classes. Did you find any downstream impacts with this approach?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Nah I haven’t found any negatives. As someone pointed out though you can do the same thing with namespaces. So I would choose either
@priyankubiswas9634
@priyankubiswas9634 3 жыл бұрын
jonah rocks ... can you create a series on clean architecture
@ogkisel3431
@ogkisel3431 3 жыл бұрын
Thanks for the video Jonathan. One thing is unclear: why should a container class be static?
@roybradley3317
@roybradley3317 3 жыл бұрын
When will the Authentication video be available. I've really enjoyed the CQRS series.
@impeRAtoR28161621
@impeRAtoR28161621 2 жыл бұрын
Creating multiple classes to get something from database is probably overkill for most but huge enterprise applications where work tons of developers
@HamzaKhan-fl8fp
@HamzaKhan-fl8fp 2 жыл бұрын
Hi Johnathan it's is very informative video but I have a question that can we create cqrs files automatically ?
@RickGraner
@RickGraner 3 жыл бұрын
Great video JW ... I came across this b/c I was looking to implement this pattern in my current .NET 4.8 project which needs refactoring (fat controllers) but I didn't want to do a re-write in CORE. Do you know if this pattern would work? or do I need to implement CORE?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! I appreciate the positive feedback ! Yeah I think it will work in .NET Framework because I think MediatR is .NET Standard. Check out the docs to make sure though 👍
@tinypanther27
@tinypanther27 3 жыл бұрын
Wouldn't it be more appropriate for the static class to be just a namespace? All those classes could be in the same file. Im only trying to understand if I am missing something
@frotes
@frotes 3 жыл бұрын
I think the reason for the static class is so that you can write everything like XXXX.query or XXX.command. Otherwise you can name the query/command XXXQuery. It's nice to have a file per XXX grouping, as code lens can't navigate from the query/command to it's associated handler
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Hi Mohammed , exactly what Frotes said. You could definitely just add them to a name space rather having them be an internal class. The more important concept is grouping your query, handler and response together!
@tinypanther27
@tinypanther27 3 жыл бұрын
@@frotes I get now. But, the samething can be done with namespaces too. You can still use it as XXXX.Query where XXXX is the namespace. You just need to be sure to include the correct namespace in the client. But I guess it doesnt really matter, but avoiding the enclosing static type would make the intent a bit more clear to someone new thats reading the code
@Wfmike
@Wfmike 2 жыл бұрын
I would prefer to use namespace rather than static class but that's just me, good tut.
@JavierDombronsky
@JavierDombronsky 3 жыл бұрын
Nice video! I just wonder how to add validation to query params using record. If you have a class you can use DataAnnotations like [Required] but with this approach I don't see how to do that. Any thoughts? Thanks!!
@LossL3ss
@LossL3ss 2 жыл бұрын
Thats a really good question! If someone could answer this, it would be very helpfull
@LossL3ss
@LossL3ss 2 жыл бұрын
After some researches I've found 2 ways (I didn't tried yet): 1 - Define your record like this: public record SomeRecord([property: Required] PropertyName); Or public record SomeRecord([Required] PropertyName); 2 - You can use FluentValidator in your Record properties
@burakisleyici
@burakisleyici 3 жыл бұрын
Thanks for tricks 👍
@hector9079
@hector9079 3 жыл бұрын
Muy bueno 👍
@damientohin9643
@damientohin9643 2 жыл бұрын
I love this pattern, and I think it is awesome. But concretely, what advantages does it bring to my microservice ? isn't it just easy to separate the logic away from my controller actions instead of introducing a new dependency and complexity just for this pattern ?
@cnikolov
@cnikolov 3 жыл бұрын
The only downside I found following along , sometimes you would want to share view models and (youw would ideally have them in viewmodels folder. to share more predictably and to resolve the namespace). The other thing I noticed, if you call your records Response, it seems very strange when you are reading the code in the controller.
@christiankhalil643
@christiankhalil643 3 жыл бұрын
Whats the point of making the class static? The items inside it are always reachable since there arent for example any fields or properties, is it just to be explicit?
@bramburn
@bramburn 2 жыл бұрын
hi Jonathan can you use this on a desktop application?
@TheMiamiVice27
@TheMiamiVice27 2 жыл бұрын
Hello Jonathan! How would you aggregate 2 or more handlers into single action. Let's say we have an user entity and cars entity, as well as join table (N-N) between cars and users. And lets say an user has 3 different cars. Well if we want to delete user from our repo we need to remove those connections to cars as well. In such a way that we have an aggregate handler (DeleteUserFromSystem) which behind the scene calls 2 commands. "DeleteUsersCars" (which deletes records in join table) and after that deletes an user calling "DeleteUser" which deletes user from our repo. All that should be 1 atomic operation (1 DB transaction, if for some reason one of those commands fails, etc.. all should be rolled back to state before calling "DeleteUserFromSystem") How would you do that. Because this expamples are way too easy.
3 жыл бұрын
Nice setup. Which monitor are you using?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks ! Just a cheap Kogan 34inch ultra wide.
@paulkeating9259
@paulkeating9259 2 жыл бұрын
Just out of curiosity is this not CQS you are describing ? I brought up that i had used this pattern in an interview and they told me that i was explaining CQS not CQRS but when i look up CQRS online this is the type of content I usually find
@DyuKrow
@DyuKrow 3 жыл бұрын
nice video!
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Thanks
@MortezaDalil
@MortezaDalil 3 жыл бұрын
You are the best
@Unleash132
@Unleash132 3 жыл бұрын
what happens if you have a more complicated handler or a Command with lots of fields? That static container will be huge.. would you separate it to files then?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
I think if the file was getting too large I would look at using a folder which contains all the code for a particular command or query. But if it gets that large to begin with maybe it should be refactored into smaller bits
@Unleash132
@Unleash132 3 жыл бұрын
@@jonowilliams26 Great! Thank you for the response. That's what I'm doing right now. The handler isn't that big but the command itself has a lot of fields can't really separate it because that's how the request to the api is.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Ahh yeah I get you now. Yeah you can’t really separate out a query if it has lots of fields. So go with the folder approach. The main idea is keep related items close by so devs don’t have to go searching for it
@codewithkashif
@codewithkashif 2 жыл бұрын
I have a quick question i.e. why people use MediatR with CQRS only?
@redmizaki5838
@redmizaki5838 3 жыл бұрын
I wonder if it's possible to do request validation with records, any idea plz?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Yeah it is possible. Currently editing a video about it now 👍
@redmizaki5838
@redmizaki5838 3 жыл бұрын
@@jonowilliams26 Ok fantastic. I look forward to it 🙂
@viniciusdavila2737
@viniciusdavila2737 3 жыл бұрын
When should you definitely NOT use CQRS? Also how do you feel about the .NET Core job market? Growing demand? Just starting out.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
It really depends on the project. If I’m working on an API I am more than likely going to use CQRS because it follows the request / response pattern. But if I need to build a windows service for example using CQRS is probably the wrong choice. And I think investing in learning .NET core is a good choice because it’s a great framework and there is a lot of .NET jobs around.
@viniciusdavila2737
@viniciusdavila2737 3 жыл бұрын
@@jonowilliams26 Thanks for the reply. Do you mind if I suggest a topic for your backlog? DDD
@Time21
@Time21 3 жыл бұрын
Am i missing something because in the Controller you wrote new GetTodoById and the class is static. Is it possible to create instance of a static class using the new keyword?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
You’re not creating an instance of the static class GetTodoById, we are creating an instance of Query. Since the Query class is inside the static class, in order to create the query you have to write “new GetTodoById.Query()”
@Time21
@Time21 3 жыл бұрын
@@jonowilliams26 isnt it the same like the Command static class Todo?
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Since the query and commands are internal classes they need to be referenced by using GetTodoById.
@Time21
@Time21 3 жыл бұрын
@@jonowilliams26 Thank you for clarifying that.
@otobest1671
@otobest1671 3 жыл бұрын
I can't understand this pattern. Should i write a class per a method ? It will be more complicated i think.
@sourabhsharma4878
@sourabhsharma4878 3 жыл бұрын
Hope you are Ok. But why new vedios are not coming ?
@MrBa143
@MrBa143 3 жыл бұрын
Everyone keeps saying "You can split your reads and write into different databases", but i dont need CQRS to do that. I want CQRS to split up my dependencies across meaningful events, instead of gathering them all in one handler (controller etc). A result of this, is to inject a single repository (ReadRepository, WriteRepository) into my handler. I dont see anything wrong with further dividing your repository pattern, into a IReadRepository and IWriteRepository and use them both in different controllers. Thus i dont understand how CQRS provides this functionality. Can someone give me the missing piece please.
@jonowilliams26
@jonowilliams26 3 жыл бұрын
CQRS isn’t a framework. It’s a design pattern. You need to implement the design pattern as you see fit. There is nothing stoping you from having your reads use a ReadRepository and your writes use a WriteRepository.
@MrBa143
@MrBa143 3 жыл бұрын
@@jonowilliams26 Yeeeeah i kind of missed the part where the CQRS pattern and the MediatR library are not mutually exclusive, thus i mixed them together.
@williamprogramer4168
@williamprogramer4168 2 жыл бұрын
⭐⭐⭐⭐⭐
@cmtv357
@cmtv357 3 жыл бұрын
Why use a repository?
@humanbot5247
@humanbot5247 3 жыл бұрын
but why so fast...thanks
@jpboy1962
@jpboy1962 3 жыл бұрын
Its a bad idea the put the handler in the same file as the request. It increases the coupling between them and loose coupling is one of the biggest advantages of MediatR. You could have multiple handers for any given request.
@davidlester6673
@davidlester6673 3 жыл бұрын
Why do people separate classes and call it CQRS!!!! CQRS is about separating reads and writes at the database. What you are doing is implementing the mediator pattern.
@vamteusz3898
@vamteusz3898 3 жыл бұрын
Command shouldn't return value
@jonowilliams26
@jonowilliams26 3 жыл бұрын
Please explain how you return the ID of a newly created item without returning a value from commands?
@vamteusz3898
@vamteusz3898 3 жыл бұрын
@@jonowilliams26 e.g. you can generate guid in controller and pass it to the command
@jonowilliams26
@jonowilliams26 3 жыл бұрын
@@vamteusz3898 going to have to disagree with that one. I don’t think the API layer should be providing the IDs when in most cases IDs are auto-incrementing generated by the database.
@vamteusz3898
@vamteusz3898 3 жыл бұрын
@@jonowilliams26 you can generate guid even on the front side but the rule that command shouldn't return value is a primary rule in cqrs (and the most often broken i think)
10 C# Libraries To Save You Time And Energy
33:59
IAmTimCorey
Рет қаралды 208 М.
Why I DON'T use MediatR in ASP.NET Core
21:51
Raw Coding
Рет қаралды 15 М.
UFC 308 : Уиттакер VS Чимаев
01:54
Setanta Sports UFC
Рет қаралды 831 М.
Family Love #funny #sigma
00:16
CRAZY GREAPA
Рет қаралды 16 МЛН
CQRS & MediatR in a .NET 8 Web API 🚀
22:00
Patrick God
Рет қаралды 12 М.
CQRS Doesn't Have To Be Complicated | Clean Architecture, .NET 6
24:09
Milan Jovanović
Рет қаралды 113 М.
Design Patterns: The Movie
1:23:12
levonog
Рет қаралды 4,5 М.
Dependency Injection, The Best Pattern
13:16
CodeAesthetic
Рет қаралды 866 М.
Clean ASP.NET Core API using MediatR and CQRS | Setup
22:39
Nick Chapsas
Рет қаралды 324 М.
Intro to MediatR - Implementing CQRS and Mediator Patterns
1:21:50
IAmTimCorey
Рет қаралды 227 М.
Using MediatR in .NET? Maybe replace it with this
11:49
Nick Chapsas
Рет қаралды 84 М.
Brutally honest advice for new .NET Web Developers
7:19
Ed Andersen
Рет қаралды 231 М.
asp.net core - MediatR (CQRS) Tutorial & Tips
39:10
Raw Coding
Рет қаралды 66 М.
Dependency Injection In a C# Console Application (.NET Core)
5:53
Jono Williams
Рет қаралды 16 М.
UFC 308 : Уиттакер VS Чимаев
01:54
Setanta Sports UFC
Рет қаралды 831 М.