The aim of this post is just to explain how to organise the data layer in an architecture. A possible definition of data layer is where the application data is being cooked and served ready for consumption to upper layers.
Data layer is fully responsible of providing data to domain layer, upper layers does not know the origin of the data ( local configuarion, local ddbb, json data, rest api…).
⛔By no means any of the data structures/classes provided by data layer could be transformed by domain or view layer components.
👉Data layer is responsible of notifying any change in the data, in that way views presenting the data affected will be invalidated and forced to fetch the data again.
This component is the outer facade of the data layer, all the domain components will interact always with this component.
👉Data manager is responsible of requesting data to the rest of data layer components and implement all the politics related with data acquisition. Examples of those politics could be:
- The app configuration is fetched from a rest service, when is not possible to perform such operation, then tries to recover data from persisted data.
- Persist data remotely via rest service, when not possible data is stored locally. Later on if it is possible, data can be synchronized with the backend.
- Depending on the criticity of the data could decide whether store data in a persisting securized area or a regular one.
- Reset all persisted data wether is database, userdefaults or keychain. 💕Very useful if you wanted to reset the app without having to reinstall the app, or just to initialize data layer before executing unit tests.
This component is the responsible to modelize data persisted in a json file.
This component is the responsible of persisting all the app settings.
Security Configuration Manager
This component is the responsible of persisting all the app settings related with the security of the app (e.g. keys, api-keys, information that could identify app user,…). Usually this component is an adaptor of keychain
This component is the responsible of persisting all massive app data. This component could be an adapter of Realm, CoreData or SQLLite.
👉As well as Data Datamanager no other outer component has to know the database technology that wraps.
⛔By no means any internal database entity should have to be exposed to the other components. DB Manager has to convert them to generic ones before providing then to the rest of the components. Following that rule you will get benefits of replacing db technology without major impact in the app.Replace DB technology without any impact on the app.
In this post we have reviewed which is the role of Data layer and its components. This post closes all the ones dedicated to this iOS Architecture.