originally from pragmatic reviews channel
arch needs to be :
- independent of framework
- testable
- independent of UI
- independent of DB
- independent of external agency
controller : introducting API layer to business logic models : the business logic repository : access the data store router : separate routing framwork from the code