This app uses the MVP (Model View Presenter) Architechture pattern. (each View Controller is a View)
- Data module contains Repositories and Models.
- Presentation module contains Views and Presenters. Each sub-module in Presentation represents a simple user story or feature like Login, Shares. This pattern is known as package by feature.
- Base module contains reusable functionalities for MVP Views and common UIViewController functionalities and
- Extension module contains extensions to first-class Swift classes and iOS Framework classes.
View- delegates user interaction events to thePresenterand displays data passed by thePresenter* AllUIViewController,UIView,UITableViewCellsubclasses belong to theViewlayer * Usually the view is passive / dumb - it shouldn't contain any complex logic.Presenter- contains the presentation logic and tells theViewwhat to present * Usually we have onePresenterper scene (view controller) * It doesn't reference the concrete type of theView, but rather it references theViewprotocol that is implemented usually by aUIViewControllersubclass * It should be a plainSwiftclass and not reference anyiOSframework classes - this makes it easier to reuse it maybe in anmacOSapplication