High Definition Standard Definition Theater
Video id : J9iYdYDbQjs
ImmersiveAmbientModecolor: #7e8d91 (color 2)
Video Format : (720p) openh264 ( https://github.com/cisco/openh264) mp4a.40.2 | 44100Hz
Audio Format: 140 ( High )
PokeEncryptID: d77f954ef1eb927e704f46d3527615c695f21ff8f4871a8934eba486cc33d1d6a3fbb952e55d35f47a017120ce45ead0
Proxy : cal1.iv.ggtyler.dev - refresh the page to change the proxy location
Date : 1732943878181 - unknown on Apple WebKit
Mystery text : SjlpWWRZRGJRanMgaSAgbG92ICB1IGNhbDEuaXYuZ2d0eWxlci5kZXY=
143 : true
Why Don’t C# Records Validate Their Values?
Jump to Connections
5,559 Views • Nov 25, 2023 • Click to toggle off description
I receive repeated questions from many programmers asking why don't I add validation to records in C#.
The answer is simple. Records are just values. Could an int validate itself? The same value could sometimes be valid, other times not. It all depends on the outer context.
A record, many believe, is more than just an int, and so it should validate itself. Let's examine that.
Should a 2-dimensional size insist on being positive? Or at least non-negative? Again, whatever the choice, that depends on the context.
You better have a separate function or an interface that does that. Now we're talking!
One variant would only allow strictly positive values. Another allows vertical and horizontal flipping, but will not let the size degenerate into a line. Yet another would allow just anything.
It is therefore common to pick or inject an appropriate strategy in code which must validate records on creation.

Thank you so much for watching! Please like, comment & share this video as it helps me a ton!! Don't forget to subscribe to my channel for more amazing videos and make sure to hit the bell icon to never miss any updates.🔥❤️

✅🔔 Become a patron ► www.patreon.com/ZoranHorvat
✅🔔 Subscribe ►    / @zoran-horvat  
⭐ Learn more from video courses:
Beginning Object-oriented Programming with C# ► codinghelmet.com/go/beginning-oop-with-csharp
⭐ Collections and Generics in C# ► codinghelmet.com/go/collections-and-generics-in-cs
⭐ Making Your C# Code More Object-oriented ► codinghelmet.com/go/making-your-cs-code-more-oo
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
⭐ CONNECT WITH ME 📱👨

🌐Become a patron ► www.patreon.com/ZoranHorvat
🌐Buy me a Coffee ► ko-fi.com/zoranhorvat
🗳 Pluralsight Courses ► codinghelmet.com/go/pluralsight
📸 Udemy Courses ► codinghelmet.com/go/udemy
📸 Join me on Twitter ► twitter.com/zoranh75
🌐 Read my Articles ► codinghelmet.com/articles
📸 Join me on LinkedIn ► www.linkedin.com/in/zoran-horvat/
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
👨 About Me 👨
Hi, I’m Zoran, I have more than 20 years of experience as a software developer, architect, team lead, and more. I have been programming in C# since its inception in the early 2000s. Since 2017 I have started publishing professional video courses at Pluralsight and Udemy and by this point, there are over 100 hours of the highest-quality videos you can watch on those platforms. On my YouTube channel, you can find shorter video forms focused on clarifying practical issues in coding, design, and architecture of .NET applications.❤️
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
⚡️RIGHT NOTICE:
The Copyright Laws of the United States recognize a “fair use” of copyrighted content. Section 107 of the U.S. Copyright Act states: “Notwithstanding the provisions of sections 106 and 106A, the fair use of a copyrighted work, including such use by reproduction in copies or phono records or by any other means specified by that section, for purposes such as criticism, comment, news reporting, teaching (including multiple copies for classroom use), scholarship, or research, is not an infringement of copyright." This video and our youtube channel, in general, may contain certain copyrighted works that were not specifically authorized to be used by the copyright holder(s), but which we believe in good faith are protected by federal law and the Fair use doctrine for one or more of the reasons noted above.

⭐For copyright or any inquiries, please contact us at zh@codinghelmet.com

#csharp #dotnet #functionalprogramming
Metadata And Engagement

Views : 5,559
Genre: Science & Technology
Uploaded At Nov 25, 2023 ^^


warning: returnyoutubedislikes may not be accurate, this is just an estiment ehe :3
Rating : 4.895 (6/222 LTDR)

97.37% of the users lieked the video!!
2.63% of the users dislieked the video!!
User score: 96.06- Overwhelmingly Positive

RYD date created : 2024-08-18T20:45:29.199628Z
See in json
Tags
Connections

49 Comments

Top Comments of this video!! :3

@thygrrr

5 months ago

I have been professionally coding for 30 years.
"Can an int validate itself?" just single-handedly leveled me up another notch.

4 |

@adamgoldsmith310

1 year ago

Yup! Factory methods are the way forward, I would probably return empty records on failing validation, or even better an empty maybe monad to avoid unneeded exceptions though😊

3 |

@ProstoDoCelu316

11 months ago

In your scenario, you cannot create self-validating Size, because you don't have all required information. When you're operating on Size, you don't know if it's Mirrored or Regular, so later in the code, when you get Size as a parameter, you will also need to check if it's Mirrored or Regular. Wouldn't it better to also store that piece of information inside the Size? It would also allow you to self-validate the object. Maybe it's worth to create a video about why self-validating records are not a good idea? I've been using this approach for some time and never run into an issue.

3 |

@pyce.

8 months ago

Are you suggesting that callers should always validate e.g. Email value object before using them because the value object will never guarantee it's validity?

1 |

@r14958

1 year ago

Hi Zoran. Let's say you create a domain where all Size objects must be of the Mirrored type. If the Size record has a public ctor with no inherent validation, how would you enforce this invariant for all consumers of the type?

|

@sinewaveaddict

11 months ago

Great channel man

1 |

@francoismouchati8189

1 year ago

I so disagree. That's why I only use records for dtos. Otherwise I keep using ValueObject. The pb with having both a public ctor as well as factories is that some developers will use the ctor where they should have used a factory.

1 |

@iorch82

1 year ago

What advantage does this bring over factory method?

|

@slowjocrow6451

1 year ago

Can you explain to this noob what the delegate Size Create is doing please ? 😅

|

@kyryllvlasiuk

1 year ago

int intIsNotValidated = 10000000000;
Sure!

|

Go To Top