I prefer to put domain logic in the model for a couple of reasons.
-
The model should have no UI code in it and thus be easier to test. Whenever possible, I like to have a fully working (meaning complete test coverage) model before writing any UI code. The controller can trust that the model is doing the right thing and just deal with UI concerns.
-
If you put domain logic in a controller, it’s not as easy to share between different apps, or even between different controllers.