- Skinny Controller: Controller should know what it wants, but not how to get it
- Skinny Model
- Many Objects
- Follow SOLID principles
- Law of Demeter
user.account.username
=>user.username
- Complex SQL queries pulled into Query object:
XxxxxQuery.new(...).to_relation
(app/queries
) - Service object:
Search.new(...).run
(app/services
) - View Model Objects
Dashboard.new().billing_histories
(app/view_model
) or View Components