This architeture is inspired on Solid by Uncle Bob.
Its main goal is to follow the SOLID principles in order to keep the software well organised, testable, easy to maintain and more importantly easy to extend/change.
As explained in the posts above and in the book, databases, network clients and frameworks are abstracted in the off layers(Plugins) because you can reuse this components in another part of your code and should imported into app as dependecie injection to acess business and perform to Views to presentation.
App is a layer of content your application, you can have many layers of apps, imagine that you have apps white label, you can use multi-target to reuse another components, in Plugins like a Service or in Reusable Layer, like a customize Cell
This layer has responsible to construct your app and define and set where to go, and also where you can make your construction configuration and navigation
Feature layer is where every feature of your app will be made with their respective layers
This layer represent the business behind each feature, to make your code more testable, your business receives by dependency injection another layers to connect of your app, like a Service, Repository.
Controller is your view and has a responsible of view, with a respective methods like a swift viewDidLoad
, swift viewWillAppear
you can should to set your customView at your controller and your controller made a bind of your components
Even though I haven't written any tests yet, the whole project is completely testable, since all layers are being isolated by interfaces, as suggested by the SOLID principles, each feature
In Example, you can see how this Architeture works
Climb Architeture is under MIT license. See the LICENSE file for more info.