This is subjective, but I find it odd that standalone ItemNotFoundReasons creates instances of nested ItemNotFoundException.ItemNotFoundReason. I would probably collapse ItemNotFoundReasons onto ItemNotFoundException, but there are other sensible alternatives too.