Both strategies can be valid and valuable under certain circumstances.
When possible, the model interpretation strategy is probably better than the compiled one, since you simply have to modify your persisted model to change the behaviour of your deployed application, without recompilation and deployment.
But you probably need to use the compilation strategy when :
- you cannot express (or don't want) 100% of the required reality in your models. In this case, you probably want to write manual code inside generated code.
- performance is a key issue for your application
I recently developped a GUI model editor, interpreting its models on the fly to render fully operational Form editors. Performance was not a issue, but code was nevertheless generated for these GUIs, since we had huge GUIs with thousands of parameters (for a space flight dynamic application), and many custom UI behaviours that required some additional source code to be fully implemented.