DEV Community

Discussion on: Refactoring node.js (Part 1)

Collapse
 
buinauskas profile image
Evaldas Buinauskas

The overall idea to throw exceptions for control flow isn't that great. You could achieve the same with proper method return type which would let higher layers know that a product might not exist. đŸ™‚

Collapse
 
paulasantamaria profile image
Paula SantamarĂ­a

I've been meaning to learn more about good practices related to error handling, but I can't seem to find any in-depth book or resources. If you could recommend a book or any trustable resource, I'll appreciate it :)

Collapse
 
buinauskas profile image
Evaldas Buinauskas

I can't recommend a specific book but I love functional programming as it helps to solve these problems by using appropriate type definitions. e.g. Maybe<Product> which indicates that there might be a product in this wrapper, there might be none, or Result<HttpError, Product> which represents response of a HTTP call to retrieve a product.

Check github.com/rametta/pratica out. A very small lib that has it all :)

Thread Thread
 
paulasantamaria profile image
Paula SantamarĂ­a

Thanks! I really want to get more into functional programming, I'll definitely check that out.

Collapse
 
paulasantamaria profile image
Paula SantamarĂ­a

I agree. I try to follow the rule of "using exceptions for exceptional circumstances". However, a situation that may be consider exceptional in some use-case, may be regular in another.

My example wasn't really written with any particular use-case in mind. It's just an example of how we can give more information to other layers about what went wrong. For the sake of the example, we could define that calling the getById method with a non-existent id is an exceptional circumstance.

Collapse
 
buinauskas profile image
Evaldas Buinauskas

Yep. The overall idea to throw a more specific exception is good, perhaps the use case isn't as it might confuse more junior developers.

I tend to think that exceptional is something that can happen without end user's interference, e.g. you can expect user to supply an incorrect parameter to an API :)

Thread Thread
 
paulasantamaria profile image
Paula SantamarĂ­a • Edited

And that's why use cases matter. I won't expect a user to supply an incorrect id. In most use-cases they won't be writing the id themselves manually, that should be solved by the front-end. And that's why, in this particular case, I find an exception appropriate.