Hacker News new | past | comments | ask | show | jobs | submit login

> I have seen a single line of code passed through 4 "interface functions"

I once had to deal with a HTTP handler that called `Validate` on interface A which called `Validate` on interface B which called `Validate` on interface C which called `Validate` on interface D which finally did the actual work. There was a lot of profanity that month.




This can happen when some of the interface operations have added logic, but others (like Validate here) don't, so just get delegated as-is.

One typical example is a tower of wrapped streams, where each layer applies additional transformations to the streamed data, but the Close operation is just passed across all layers to the lowest one (which closes the underlying file or whatever).


I mean to a point that makes sense; you got your base data types like idk, a bank account number which can be validated, which is inside a bank account which can be validated, which is in a customer which can be validated, etc etc. Visitor pattern style, I believe?


That would make sense but this was one piece of data being validated against a lookup based off that data. The previous devs just had a, uh, Unique™ style of development. I swear they must have been on some kind of "editor tab count" bonus scheme.


imagine allowing invalid values to exist


> imagine allowing invalid values to exist

Pretty common, for example when using databases as a mostly dumb store with all the logic in application code, and then a second application (or big refactor) appears and they introduce a subtle bug that results in an invalid `INSERT` (or whatever), and the database happily accepts it instead of rejecting it.


Sounds awful.


This is actually my preferred approach. If you want to put a 4gb base64 as your phone number, go right on ahead; best believe I will truncate it to a sensible length before I store it, but sure. Who am I to question your reality.

Sadly, people abuse shit like that to pass messages (like naming Spotify playlists with messages to loved/friends/colleagues while in jail) and maybe we have to assert a tiny bit of sanity on the world.


How do prisoners have access to Spotify?


Presumably some feature/jailbreak of JPay (and the like) tablets.

https://offers.jpay.com/jp5-tablets/


imagine enforcing invariants as part of the design of a software system


The nerve, taking good jobs away from young qa testers. Wait till the IT Union hears of this!


I’m just saying enforce invariants at construction time / type-designing instead of with the validity checks


This wasn't that kind of validation - it was "is this token allowed to do this thing?" Like "validate your parking" kind of scenario.

(And yes, it should probably have been "CheckAuthorisation")


naming things is so hard.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: