Often when we're issuing commands or to querying our objects, there is extra information about the operation that we need to get back to the caller. E.g.
bool IsSomethingOkayToDo()
In this case, if false, we might want the caller to know why it wasn't okay to do.
In C# typically I do:
string reason; foo.IsSomethingOkayToDo(out reason);
(Or in the case of multiple reasons you could pass in a list.)
Is this the best way? Assuming I want to adhere to command/query and side effect free functions, are there other OO approved alternatives?