Пікірлер
@Luke_Ainsworth
@Luke_Ainsworth 4 сағат бұрын
Hey Milan, Great video! I notice in some of your other examples around Aggregate Roots, you'll use an aggregate root class which is just an entity that handles your domain event logic as-well. Have you moved away from Aggregate Root classes/marker interfaces?
@user-fd3yr5eo4g
@user-fd3yr5eo4g 4 сағат бұрын
Please, please, please. We need authorization for SignalR.
@JoseGonzalez-lt9kr
@JoseGonzalez-lt9kr 4 сағат бұрын
I like how his kick to star the car
@user-pq5cb9ht9u
@user-pq5cb9ht9u 6 сағат бұрын
waiting for the next keyclock video
@DavidSmith-ef4eh
@DavidSmith-ef4eh 9 сағат бұрын
The naive version would be faster if you only had 10 rows in the table...🤣
@LordErnie
@LordErnie 11 сағат бұрын
Wouldn't you say that double dispatch, in your given case, forces the upper layers to always have access to data persistence objects? I mean it works, but wouldn't you rather just write a wrapper or an abstraction to enforce those rules instead? It's nice to have it right there on the model, but it really stings a bit. Like a work-around for something that you know isn't correct but it works and doesn't violate anything so you leave it be. Rich domain models are nice, but isn't there a boundry to what we consider logic for an entity and logic for data persistance? Even if the resource itself is desynced (your in memory representation of the list isn't accurate, the state in your database is different), wouldn't you say that it would be better to just hook your entity to some event handler that would update the collection (and its contents if needed)? It involves more complexity but it removes the responsibility from the domain model, which shouldn't be bothered with the outside world. Any thoughts on this?
@MilanJovanovicTech
@MilanJovanovicTech 10 сағат бұрын
"but it really stings a bit" - it does, because the example I used here kinda sucks. My bad on that. Sometimes I try to hard to share some concept without coming up with a problem the requires it. Your analysis is pretty spot on.
@farzinfaghirnavaz1027
@farzinfaghirnavaz1027 14 сағат бұрын
eagerly waiting for the next video
@MilanJovanovicTech
@MilanJovanovicTech 10 сағат бұрын
Thanks. Did you check the Keycloak videos?
@marceloleoncaceres6826
@marceloleoncaceres6826 15 сағат бұрын
Great example, thanks for sharing your time and knowledge
@MilanJovanovicTech
@MilanJovanovicTech 10 сағат бұрын
Most welcome!
@user-cp8hr2zr5k
@user-cp8hr2zr5k 16 сағат бұрын
Hello, how can i publish domain events if i have separate domain and database models?
@MilanJovanovicTech
@MilanJovanovicTech 10 сағат бұрын
Publish when mapping from one model to the other
@user-wt2kr9fn1k
@user-wt2kr9fn1k 18 сағат бұрын
Great content!
@MilanJovanovicTech
@MilanJovanovicTech 18 сағат бұрын
Thanks a lot :)
@zohorishayesteh1577
@zohorishayesteh1577 20 сағат бұрын
❤❤❤❤❤❤❤❤❤❤
@MilanJovanovicTech
@MilanJovanovicTech 18 сағат бұрын
Much appreciated!
@RoyZASTEROiD
@RoyZASTEROiD 22 сағат бұрын
Did u maked any video about using 'iendpointroutebuilder' extension, place of classic controllers?
@MilanJovanovicTech
@MilanJovanovicTech 22 сағат бұрын
Try this one: kzfaq.info/get/bejne/edF3eblmx8vPko0.html
@RoyZASTEROiD
@RoyZASTEROiD 21 сағат бұрын
@@MilanJovanovicTech thank you very much.
@ordinaryBrownDad
@ordinaryBrownDad Күн бұрын
@MilanJovanovicTech Great demo thanks, can you please explain how Modular Monolith is different from Vertical Slices? To me till now both architecture look similar
@MilanJovanovicTech
@MilanJovanovicTech 23 сағат бұрын
Modular monolith is essentially vertical slices on a bigger scale. The nuances is how we control communication and data isolation between modules. I've made a few videos about modular monoliths, you can check them out.
@jimmyahmed5619
@jimmyahmed5619 Күн бұрын
What is the static analysis name?
@MilanJovanovicTech
@MilanJovanovicTech 23 сағат бұрын
Showcasing on Friday
@dangerosa01
@dangerosa01 Күн бұрын
We need a special price for Latin America. the price for 1 course is our salary 😂
@MilanJovanovicTech
@MilanJovanovicTech 23 сағат бұрын
There already is, check the course page on my website
@mohammadalisehhat2027
@mohammadalisehhat2027 Күн бұрын
Awesome! Thanks a lot for this great video. I have a concern, if I set some members of a class as internal, how could I write test for these members in another assembly? In that case we don't have access to these internal members! Is there any solution for this problem?
@MilanJovanovicTech
@MilanJovanovicTech 23 сағат бұрын
Expose internal members to the unit test assembly
@kimandjasoninflorida
@kimandjasoninflorida Күн бұрын
Great video, I'm going to try this on my next small project. Would you place the implementation of IPasswordHasher and IUserRepository in the Users Folder?
@MilanJovanovicTech
@MilanJovanovicTech 23 сағат бұрын
Yes, we can create an /Infra folder to hold the implementations? Whatever makes sense.
@GiovanniOrlandoi7
@GiovanniOrlandoi7 Күн бұрын
What is the name of this tool? Is it also available for JetBrains Rider?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Static code analysis, will show in Friday's video You can also check this: www.milanjovanovic.tech/blog/improving-code-quality-in-csharp-with-static-code-analysis
@user-hj6bb9my1f
@user-hj6bb9my1f Күн бұрын
Pbkdf2 is also a really old algorithm from early 2000s, Argon2 is the recommended for password hashing now. Also Buffer.BlockCopy is better to get the salt from the concatenated password hash.
@rikudouensof
@rikudouensof Күн бұрын
Thanks for the video
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
You bet
@KristianS93
@KristianS93 Күн бұрын
Would you generally recommend to create your own JWT implementation rather than using the bearertoken services from identity ?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
No, I recommend using an Identity Provider. But it doesn't hurt to know how things work under the hood. :)
@muhammedalikhan6118
@muhammedalikhan6118 Күн бұрын
are nsubstitue and fluentassertions supported by .net8. mine is giving compatibility error
@Alaa_vie
@Alaa_vie Күн бұрын
Nice as always. You are my fovrite youtuber
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Thanks a lot! :)
@KingOfBlades27
@KingOfBlades27 Күн бұрын
So this is a tool I can download to Visual Studio and it will inform when risks like this occur in the code?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Static code analysis us built-in with .NET version. This particular error is from the SonarAnalyzer.Csharp package. I'll showcase the entire setup on Friday when I release the full length video.
@habibsalimi674
@habibsalimi674 Күн бұрын
can you provide code sample of hashing ?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
This Friday :)
@abo1428
@abo1428 Күн бұрын
Maybe also, how in general to write more secure code?
@frontalachivment3604
@frontalachivment3604 Күн бұрын
What a shady practice that you highlight incorrect statement under my comment. "wow that’s a bad video with wrong information. " - @ryan-heath you were first with talk is cheap comment and now you doing exactly same. Abstraction brings cost, oop is making gaps in memory allocation which is not cpu friendly. Thats video show exactly that. "Clean code" is at some point a way that it looks like "organized code" but its in cost of perfomance. If you make each request as seperate class, its huge allocation cost in real time systems, in big scale you need to think in different way than just i like this "code visual".
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Would've been best to keep under the original comment 🤷‍♂️
@gryrvn
@gryrvn Күн бұрын
Nice... 🙂
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Thanks 😊
@battomisaadi9251
@battomisaadi9251 Күн бұрын
love your content! Could you make a tutorial on generating presigned URLs and uploading files to an S3 bucket. Thanks for all your great work!"
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Can do, that's a great topic!
@battomisaadi9251
@battomisaadi9251 Күн бұрын
​@@MilanJovanovicTech Thank you so much it's been a 3 days stuck on it i get the url but when i try upload to s3 always fail😢😢😢
@rlarno
@rlarno Күн бұрын
Good simple video, simple comment though: You are leaking security info by returning "The email is already in use". With a datadump of hacked email/password combos, one could hack into the system. I understand this is a simple tutorial video, and you can't capture all the best practices (like doing this TDD style would make it even better)
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Even large social media networks return info about something like that. Just tested it with Facebook, for example. We could return something more generic like 'That email address is not available'
@rlarno
@rlarno Күн бұрын
@@MilanJovanovicTech Big companies will probably have other tech to negate the problem (like rate limiting, and other detection methods) and will not allow to data mine their system. We negated this problem by adjusting our flow, as when a user registers we would send an e-mail with a unique link to complete the registration. So 1) the attacker can never know it the email is registered and 2) the user would be made aware his account is potentially exposed. But again, I would not expect you to go all this way or explain it in a nice simple tutorial video.
@maxencemartin6498
@maxencemartin6498 Күн бұрын
Hi, thank you for the video. I don't know why they don't add some extra endpoints for managing roles associated with User when registering. What the tips in that case ? Implementing a custom endpoint in order to associate role with a user ?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Yep, have to make something custom
@ahmadaskar3360
@ahmadaskar3360 Күн бұрын
Video on custom validation when implementing validation attribute? Why it shows the error in the modelstate but not on the client?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
Which video?
@ahmadaskar3360
@ahmadaskar3360 Күн бұрын
@@MilanJovanovicTech no, I am asking you if you could do a video on custom validation😁
@ArnonDanon
@ArnonDanon 2 күн бұрын
​@MilanJovanovicTech returning access token feels to me more like an infrastucture thing for security at the endpoint level than part of the domain itself, I wonder how its feets in the application/domain use case you created here, what abstraction would you pass in to handle it and what would the Handle method return if not a User object?
@MilanJovanovicTech
@MilanJovanovicTech Күн бұрын
It's use case as any other. Why wouldn't it be? The handle method can just return a simple string representing the access token.
@Haru2609
@Haru2609 2 күн бұрын
So configure.UseMicrosoftDependencyInjectionJobFactory(); is deprecated, its one of the first things in the video, so I'm already stuck... Are you aware of how to fix this? Anyway, thanks for the video.