Everybody knows about “service objects” concept. It’s an efficient way to DRY you models and follow single responsibility principle.
Here is my vision on how to do them right: use standard CRUD interface to them (save, destroy, etc).
Now you have uniform interface to all of your domain logic objects (models and services) and it’s much easier to use them in controllers. Also, it forces you to think about your domain logic in terms of CRUD interface, like REST and.
In the next post I’ll show why this is very useful.