- 137
- 593 180
Gui Ferreira
Portugal
Приєднався 14 сер 2011
I help .NET Developers level up their skills. 🚀
Hey friends! 👋
My name is Guilherme, but you can call me Gui if Portuguese 🇵🇹 pronunciation is not your thing.
I see myself as a Minimalist Software Craftsman. That says a lot of what I talk about here.
So, why this UA-cam channel?
To share with you to simplify your life as a Developer through knowledge, technology and practices.
See you soon!
Hey friends! 👋
My name is Guilherme, but you can call me Gui if Portuguese 🇵🇹 pronunciation is not your thing.
I see myself as a Minimalist Software Craftsman. That says a lot of what I talk about here.
So, why this UA-cam channel?
To share with you to simplify your life as a Developer through knowledge, technology and practices.
See you soon!
10 Surprising Lessons Software Developers Can Learn From 'Factfulness’
Here are 10 lessons from the book "Factfulness" that made me a better developer.
📙 Factfulness: www.amazon.es/dp/147363749X?ref_=as_li_ss_tl&language=en_US&linkCode=gg2&linkId=89e43c4da086b74ba218d0df26a59e71&tag=guiferreira07-20
⏲️ CHAPTERS
00:00 Intro
02:17 Lesson 1
03:56 Lesson 2
05:55 Lesson 3
07:53 Lesson 4
09:33 Lesson 5
11:46 Lesson 6
14:10 Lesson 7
15:51 Lesson 8
17:33 Lesson 9
19:12 Lesson 10
📙 Factfulness: www.amazon.es/dp/147363749X?ref_=as_li_ss_tl&language=en_US&linkCode=gg2&linkId=89e43c4da086b74ba218d0df26a59e71&tag=guiferreira07-20
⏲️ CHAPTERS
00:00 Intro
02:17 Lesson 1
03:56 Lesson 2
05:55 Lesson 3
07:53 Lesson 4
09:33 Lesson 5
11:46 Lesson 6
14:10 Lesson 7
15:51 Lesson 8
17:33 Lesson 9
19:12 Lesson 10
Переглядів: 1 055
Відео
5 Apps for 2025 that I’ve Been Using Lately
Переглядів 2,3 тис.День тому
Let me share with you 5 applications I've been using as a Developer, and I will definitely keep using them in 2025. ⏲️ CHAPTERS 00:00 Intro 00:13 Bananotate 03:42 Grammarly Pro 06:38 ProtonVPN 09:34 Rectangle App 11:20 Cursor AI
I Tested a Redirect API & Here's What I Learned
Переглядів 99414 днів тому
⭐️ Learn how to build a complete Cloud Application: dometrain.com/course/lets-build-it-url-shortener-in-dotnet/?ref=gui-ferreira
Simple Tips to Effectively Apply Feature Folders
Переглядів 2,7 тис.21 день тому
⭐️ Learn what it takes to build a complete Cloud application with 40% discount: dometrain.com/course/lets-build-it-url-shortener-in-dotnet/?coupon_code=BLACKFRIDAY24&ref=gui-ferreira
I Tried TUnit for the First Time, Here's What Happened
Переглядів 2,5 тис.Місяць тому
I decided to try TUnit, a Testing Framework for dotnet, for the first time, and I decided to record it. 💎 Be a Patreon to get the source code: patreon.com/gsferreira ⏲️ CHAPTERS 00:00 Intro 12:12 Diagnosing Issue 16:32 Issue Diagnosed
How to Trigger an Azure Function from Cosmos DB
Переглядів 438Місяць тому
In this video, let's see how to trigger an Azure Function when Cosmos DB data changes.💎 Be a Patreon to get the source code: patreon.com/gsferreira #dotnet #azure
9 JetBrains Rider Secrets You Should Know - Plus a Special Giveaway!
Переглядів 5 тис.Місяць тому
🎁 Win a 1-year JetBrains dotUltimate license for FREE: guiferreira.kit.com/6dc25d19ef ⏲️ CHAPTERS 00:00 Intro 00:25 Feature 1 03:42 Feature 2 06:05 Feature 3 09:08 Feature 4 10:24 Feature 5 12:24 Feature 6 14:14 Feature 7 18:26 Feature 8 20:10 Feature 9 #dotnet #jetbrains
You Should Know This Before Using Page Numbers on Your API
Переглядів 2,9 тис.2 місяці тому
💎 Be a Patreon to get the source code: patreon.com/gsferreira What can go wrong with using page numbers in your API. 💌 Free Developer Insights: guiferreira.me/newsletter #softwaredevelopment #softwarearchitecture #restapi
8 Tips to Crack the Interview as Software Developer
Переглядів 8092 місяці тому
Ace your software developer job interview with these 8 behavioural tips! 💌 Get Free developer insights like this in your mailbox: guiferreira.me/newsletter ⏲️ CHAPTERS 00:00 Intro 01:18 Tip 1 01:57 Tip 2 02:28 Tip 3 04:38 Tip 4 06:25 Tip 5 07:54 Tip 6 10:39 Tip 7 11:52 Tip 8 14:15 Bonus Tip #softwareengineer #programming
How to Debug .NET in Cursor AI (and How TDD Ruined my latest Review)
Переглядів 3,2 тис.2 місяці тому
💌 Get Free developer insights like this in your mailbox: guiferreira.me/newsletter In this video, let's see how to debug .net code using Cursor AI. 🔗 Issue .NET Debugger: github.com/dotnet/core/issues/505 🔗 NetCoreDbg: github.com/Samsung/netcoredbg 🔗 Extension: open-vsx.org/extension/muhammad-sammy/csharp 🔗 For macOS: github.com/dgokcin/dotnet-cursor-debugging-with-breakpoints?tab=readme-ov-fil...
Every .NET Developer Needs to Try This (Cursor Review)
Переглядів 12 тис.2 місяці тому
💌 Get Free developer insights like this in your mailbox: guiferreira.me/newsletter 💎 Be a Patreon to get the source code: patreon.com/gsferreira #dotnet
How to Organize Your ASP.NET Program.cs File
Переглядів 6 тис.2 місяці тому
Join me as I show you how I organise my Program.cs in large ASP.NET Applications 💎 Be a Patreon to get the source code: patreon.com/gsferreira 🚨 KEY LINKS 🤝 Support me on Patreon (and get access to source code) here: patreon.com/gsferreira 💌 Free Developer Insights: guiferreira.me/newsletter 📘 Courses: guiferreira.me/courses/ 👨🏫 Workshops: guiferreira.me/workshops/ 🔗 GET IN TOUCH LinkedIn: www...
How to Set Up a GitHub Repo for an Amazing Developer Experience
Переглядів 2 тис.3 місяці тому
Here are 10 actionable tips to improve the developer experience on any GitHub repository. 💎 Be a Patreon to get the templates: patreon.com/gsferreira 🚨 KEY LINKS 🤝 Support me on Patreon (and get access to source code) here: patreon.com/gsferreira 💌 Free Developer Insights: guiferreira.me/newsletter 📘 Courses: guiferreira.me/courses/ 👨🏫 Workshops: guiferreira.me/workshops/ 🔗 GET IN TOUCH Linked...
Building better DTOs in C#
Переглядів 7 тис.3 місяці тому
How to build better DTOS in C# dotnet 💎 Be a Patreon to get the source code: patreon.com/gsferreira 🚨 KEY LINKS 🤝 Support me on Patreon (and get access to source code) here: patreon.com/gsferreira 💌 Free Developer Insights: guiferreira.me/newsletter 📘 Courses: guiferreira.me/courses/ 👨🏫 Workshops: guiferreira.me/workshops/ 🔗 GET IN TOUCH LinkedIn: www.linkedin.com/in/gferreira Twitter: twitter...
Clean Architecture vs Hexagonal Architecture: Which One Should You Choose for Microservices?
Переглядів 2,6 тис.3 місяці тому
Is it better to use Hexagonal Architecture or Clean Architecture for microservice applications? 💎 Be a Patreon to get the source code: patreon.com/gsferreira 🔗 Reddit: www.reddit.com/r/softwarearchitecture/comments/1esjc0z/clean_architecture_vs_hexagonal_architecture_for/ 🚨 KEY LINKS 🤝 Support me on Patreon (and get access to source code) here: patreon.com/gsferreira 💌 Free Developer Insights: ...
I added Azure Active Directory B2C to ASP.NET Core
Переглядів 2,9 тис.3 місяці тому
I added Azure Active Directory B2C to ASP.NET Core
REST, gRPC, or GraphQL: Which Should You Use?
Переглядів 4,3 тис.4 місяці тому
REST, gRPC, or GraphQL: Which Should You Use?
"Should I write Unit Test for a Repository class?"
Переглядів 2,7 тис.4 місяці тому
"Should I write Unit Test for a Repository class?"
Goodbye Exceptions! Hello Result Pattern!
Переглядів 12 тис.4 місяці тому
Goodbye Exceptions! Hello Result Pattern!
5 Tips for Maintainable OpenTelemetry in .NET
Переглядів 1,7 тис.5 місяців тому
5 Tips for Maintainable OpenTelemetry in .NET
When do I throw an Exception or Return an Error
Переглядів 4,4 тис.5 місяців тому
When do I throw an Exception or Return an Error
How to Test RabbitMQ with Testcontainers in .NET
Переглядів 1,6 тис.5 місяців тому
How to Test RabbitMQ with Testcontainers in .NET
How do I Stay Organized as a Developer
Переглядів 2,6 тис.5 місяців тому
How do I Stay Organized as a Developer
Building Complex Objects in a Simple Way with C#
Переглядів 9 тис.5 місяців тому
Building Complex Objects in a Simple Way with C#
The Testing Feature YOU DIDN'T KNOW YOU NEEDED
Переглядів 3,4 тис.6 місяців тому
The Testing Feature YOU DIDN'T KNOW YOU NEEDED
How to Write Readable Tests (7 SIMPLE TIPS!)
Переглядів 1,6 тис.6 місяців тому
How to Write Readable Tests (7 SIMPLE TIPS!)
Let's stop calling them 3 Pillars of Observability
Переглядів 1,1 тис.6 місяців тому
Let's stop calling them 3 Pillars of Observability
Getting Started with Test-Driven Development
Переглядів 3,2 тис.7 місяців тому
Getting Started with Test-Driven Development
XUnit documentation is trash, it's the worst I've ever seen.
Great video. I was confused on where to put infrastructure codes.
Can I help with any questions? If you share a practical example that comes to mind, I can help.
Thanks your insights of this book!
My pleasure!
There are economic reasons. Excitement and challenges keep devs moving forward, helping us land better-paying jobs when a raise doesn’t come through.
All beautiful until jsou need to nest 3 methods returning result...
9:34 I've using Windows for a long time so that's so weird when I see the Macs needs an app to position the windows on screen xd
Yap.... It's hard to believe 😅
That's a great one about some tips when using Rider 👌 I've started using after they license model change, and I really like it, the debugging experience is really cool as well as the amount of refactors suggested. The IDE in general is fantastic. Nonetheless, I think that VS has close the gap a lot in terms of usability and performance, so both are two amazing options!
Thanks for sharing! Are you on Windows?
@gui.ferreira yes I am, and honestly, I've selected the VS keymap to keep my productivity as high as possible since the beginning
Thanks for sharing these insights. 🙏.
My pleasure!
Nice one.. Is there a way to create a dynamkc consumer using Kafka flow? Say i have a multi tenant app where each tenant kafka broker details i will get at run time. And also each tenant will have there its consumer setting like batch count, timeout and other setting. Could you pour some inpiut on this?
I don't think KafkaFlow has something out of the box for that. However, you can always register several consumers. So, if you have the tenant info on startup, I guess you can do it.
keep going thanks so much
Thanks, will do!
The title of this video is "Why We ALL". But in the video, you say, "most of us". Please don't do titles like that. Also, as of today, xUnit has 564,204,215 downloads on NuGet. NUnit has 412,892,074. That doesn't seem like that big of a difference. FWIW, my choice is always NUnit.
Also, you don't have to use [Setup] methods in NUnit. I never do.
This is really nice explanation especially adding the notes at 5:12 which helped me giving a background why we need limit and offset.
Thanks for the bananotate love ❤️❤️
🍌
in windows Banana 🥲🥲
Bananas are only compatible with Apples 🍎 😅
"We want an Event Storming course, and I wish it could be available on Dometrain, along with a practical implementation session."
Added Grammarly to my list
It's great!
Você conseguiu resolver no Cursor para fazer o debug de .Net? Em outro vídeo seu, disponibilizou um link em que era muito trabalhoso adequar a ferramenta. Conseguiu uma maneira mais fácil?
Infelizmente não. No entanto, tenho usado o Cursor especialmente para tudo o que não é .NET.
Só BR fazendo conteúdo brabo demais kkk
Na verdade é PT 😅
There's no app that could mac os not suck absolute ass. Worst OS hands down.
App 1 = Bananotate App 2 = Grammarly Pro App 3 = ProtonVPN App 4 = Rectangle App App 5 = Cursor AI
The key point of using test doubles and fakes in particular is the maintainability. They prevent your test cases from being coupled to the interfaces of the system. This is imho the biggest issue with using mocking libraries. You’ll realise this once you break 50 cases by modifying an interface and you know none of the intended behaviour actually broke and you realise you need to modify all those mock setups. You’ll wonder what did I do wrong, why is unit testing and TDD so highly praised, there’s so much maintenance, It’s the quickest way to put people off of unit testing and TDD.
Excellent! 👏
Well, I guess the hard part about legacy code is figuring out the test cases when there's no one who could tell you. Unfortunately Verify and code coverage tools can't fix the fallacy of a hire and fire policy.
That's true. But, with something like Approval Testing, you don't need to "predict" the examples. That simplifies the process.
@gui.ferreira In my experience, actual legacy code won't produce deterministic results. That's usually the reason why it's hard to work with and therefore needs refactoring. Sure, with approval testing you don't need to figure out the assertions, but the tests will still be flaky at best. Just think of some annoying timestamp which you can't control because the time source can't be injected. Well, you'll have to make the time source injectable upfront without test coverage before you can start testing. It is what it is...
Do you provide or point to a place to put this architecture at practice for example in React/Next.js apps?.
I've seen these two. They are not perfect, in my opinion, but they will give you an idea of what it should look like. github.com/Maua-Dev/hexagonal_arch_react_template github.com/juanm4/hexagonal-architecture-frontend
My last comment
Interesting use, great video!
Thank you! Cheers!
Hi, thanks for the video) and what is your terminal theme/customization?
I'm using ohmyposh and the theme is Dracula
The lib hasnt been updated in a year... do you think it is still alive really?
In fact, it's not a good sign 😔 And unfortunately, its still not supported by Testcontainers yet. github.com/testcontainers/testcontainers-dotnet/issues/122
And I would like very much a video on integration testing with TUnit
Added to the pipeline :)
I'm on Linux and use Rider, so the command line is absolutely fine for now :) The expectation that a new framework - for anything - gives the same experience than established solutions is a problem for all new things. The problem is on our part, we have to let go of comfort. But if the core idea has merit, and for TUnit it looks like it definitely does, that means when we get behind it, the discomfort is only tempory. And I would like to see TUnit next to my go-to xUnit and the others in Rider.
I have still some questions about this? How would you test that your ef mapping to your domain classes? And also How would you tests your db migration script? I think both of them would be more an intégration test.
Yes. You are correct.
I'm trying Before and After attribute, can't get it to work. I have to inherit it in my test class. As well as use the attribute. Mine is TestCommon : BeforeAndAfterTest. In my test class I inherit : TestCommon as well as use the {TestCommon] decorator / attribute for the test I want to apply it to. I'm setting up an Edge Browser in the Test Common file. It's null as soon as I leave the Before method. So the life cycle doesn't seem to be happening here. The TestCommon class, with Before method and After method in it, evidently is destroyed when I leave the Before method. When I get to the test, the instance of the browser is null. I am populating a public property of type EdgeBrowser in Test Common class. I'm seeing it in the Test. I traced this through during debug. As soon as the closing curly brace is hit, I have no more browser. So when the code in the test is hit next, the browser instance is NULL. Please show the entire file set up for the test using the [BeforeAndAfter] attribute. It would be useful to see how you're doing this. The video shows just the [BeforeAndAfter] decorator being applied. It makes one assume this is all that is needed but this can't be right. Thanks!
From the intro he looks like he just started studying programming, and he has no idea what he's talking about
Very deep rabbit hole and frustrating. Thank you for confirming us devs aren't the crazy ones. The only thing documented worse than security is .NET Maui.
Now I'm afraid of MAUI 😬
keep it up Sir!
Yes Sir! 🫡
Keep going, I do love your content.
Thanks for watching!
how would you handle when one feature talks to another do you call them directly or duplicate the code?
Abstract it into a common service
There are many ways to model that relation. One possibility is by modelling domain events or treating the other feature as if it is an external API (by using an abstraction)
@@gui.ferreira I have a question for the case of treating it as an external API. I see people use CQRS in the feature module/package, but make "fat" external API service. Why don't let the client of the module just use the handlers directly?
@@iliyan-kulishev why you say CQRS, you mean something like the mediator pattern?
@@gui.ferreira Yes. Or even without a Mediator. Why not just inject handlers from other feature, or use the Mediator directly ?
Is this infrastructure folder contains the implementation of external services communication? Like repositories, Http API integrations, Blob storage and so on? is it shared and global to all features? It seems pretty similar to Infra layer of the layered approach, right?
Not properly. You don't want to bring things like shared repos or API Clients on Vertical Slice Architecture. However, for some small things like creating a DB connection, you need to keep them apart. As an example, if we think about a conventional CRUD repository, each method will likely be in a different slice, while the connection code might be reused.
@@gui.ferreiraI think I get. The infra folder contains only configuration for infrastructure services and global reusable code. And the slices (features) contains the implementation details and functionalities itself. Right?
@@haraheiquedossantos4283 I think you got it 😉
In my personal experience I rarely see any developer use xUnit. I see a wider adoption for MSTest and NUnit. Recently I have been researching what are the pro's and con's of using each framework. I must say that NUnit, xUnit and MSTest can practically do the same things. For some features you need to rely on additional libraries with all tests. However relying on additional libraries isn't necessarily a good thing. Still if I must make a choice of which one is better, my choice would be NUnit, because it has the most expansive and up-to-date documentation. MSTest and xUnit's documentation is actually hot garbage. One needs to rely on blogs and youtube video's of others, that try to make sense of those frameworks, and hope they are still relevant.
Oddly enough, I have a different experience than you. However, I strongly agree with you on the topic of documentation.
Can i become a professional .net programmer with mac m1 ? Thanks in advance ❤
Sure. Early this year I was using a macbook m1 on my full time job
6:42 I DO like the idea of not duplicating based on context because then I don't have to have unnecessarily long names. The fact that you have many names that are the same (like Request) in different folders makes it easy to know what it's doing and it's easier to implement a naming convention. A big selling point of vertical slice architecture is that you're mostly only working on one feature at a time so smaller class names is easief to understand. Having said that it would be better if the IDE could be set up for someone who wants to do VSA. Thanks for the video
Great point. My problem with it is quick navigation. I can see myself getting confused.
Thanks a lot Gui, awesome as usual 👍 I have a question about Clean architecture and file upload, Is it ok if used IFormFile in Application project as a parameter in the IRequest class/record public record CreateArticleRequest(string Title, string Content, IFormFile ThumbnailImage) : IRequest<Result<CreateArticleResponse>>; or create a custom class and map IFormFile to it in the controller public record CreateArticleRequest(string Title, string Content, FileUploader ThumbnailImage) : IRequest<Result<CreateArticleResponse>>; public async Task<IActionResult> CreateArticle([FromForm]CreateArticleRequest command,[FromForm] IFormFile formFile) { command.FileUpoader = formFile.MapToFileUploader(); //... } or you have a better approach ?
The way that I approach architecture is that I prefer to keep "transport stuff" outside of my Core Application code. I would go with the second approach. But, be careful with memory. I suffered with that in the past, because I was basically copying the stream 😉
video start at 3:00
Smart steps into can also be accessed by clicking the 3 dots during debug on the left bottom.
Thanks for adding that!
What is the font used for IDE? Project Explorer etc? I use default on the latest Rider version, and yours seems more appealing... Thanks for letting me know.
Hey! Check here: ua-cam.com/video/wQG_LntcAQQ/v-deo.htmlsi=rmElMjqm7wYaAyqp
The visitor pattern works great for serializing / deserializing syntax trees. That's the typical case I know.
True! In some languages, it is the most efficient way to do it.
I really enjoyed seeing your learning and experiment journey learning this. It was very helpful to see that.
Awesome! Thanks for sharing!