I'd still keep a method that throws. Personally, I prefer throwing exceptions in code where I expect a model to be complete rather than having to case match the validate() method everytime and then throw. Why not a checkValid method that returns a scala Try and then validate() that throws?