Software Architecture
Clean architecture
The architecture should support to keep the core of the app as clean as possible.
The outer layers (low-level modules) shall depend on the inner layer (high-level module). This is achieved by Dependency inversion principle.