Name Eris is inspired from here
Architecture is divided in the following independently injectable and testable layers.
Layers are defined here.
Application Screenflow and later Push Routing handler.
Display of data. Data is being displayed in the form of Models and views confrom to ModelConfigurable to populate data via configure(model:) method
Controller contains logic of view's state representation and pass actions to viewModel
- ViewModel does all the business logic implementation with or without help of mappers.
- Also it informs view-controller about the state update via
bindings. - Mapper are the
Domain Usecases. Any domain logic will be injected in the form of independently tested usecases. Idea is to keepDomain-Layerindependent from ViewModels thus can bewidely reuseable. Current implementation doesn't contain any domain logic thus doesn't contain any mapper.
Its an abstraction layer between ViewModel and Data Stores that encapuslates Data-source layer. Currently there are two data sources, Network and CoreData. This layer can encapulate further data sources aswel i-e Remote Configurations etc
Network: Its a wrapper written on top of Swift Package Ceres which fetch and decode data into inferred model object.
CoreData: Persistor encapsulates CoreData and fetches and updates data.
Following are few considerations while writing code
- Code is following
MVVM-CArchitecture. - Every layer is interfaced via
dependency managementand lays foundation for high level DI-Framework - Code is
testableand mocks can easily replaced with original objects - Code is following
iOS Swift Style Guidelinesand have same styling throughtout the code. - Project is structured to
scaleas big as it can be Folder structureis highligting the architecture- Network is implemented as an independent
Module (Swift Package) - Layers are interfaced together via
Protocols - Dependency resolution is being done via Factory.
NWPath.Statusdoesn't return.satisfiedon simulator so for getting best results please test on device.
A detailed article was published on Medium and can be found here
