Approach 3 is not correct for production applications. As we know that production applications is multi threaded and handles multiple requests at a single time. So If I have used this approach for a model lets say User and lets say my piece of code is running for one thread and same model is being called from another call then its validations and callbacks will be skipped for the second call as well. This approach can work for single threaded applications but this is not thread safe approach.