VIPER = View – Interactor – Presenter – Entity – Routing  (Clean Architecture)

1. MVC Issues:

Since much of application logic can’t be in Model or View -> we put them in Controller -> create huge ViewControllers.

VIPER will help to put application logic in proper places -> lean, efficient ViewControllers.


  1. View: displays what is sent by Presenter and relays user input to Presenter.
  2. Interactor: contains the business logic
  3. Presenter: view login – prepare content (receives from Interactor ) – handle input (request to Interactor)
  4. Entity: basic model objects
  5. Routing: navigation logic – which screens to be shown

Interactor, Presenter and Entity are all PONSO (Plain Old NSObj), so it’s very easy to write unit tests for them, so it would be easy to test-cover most of the project.