All our components should be keep the data accessing (read and write), business logic and interface code separated
More specific a component should be composed of the following 3 layers:
- Data layer: The responsibility of this layer is to handle access to data. This includes:
- Sending and receiving messages on the message bus.
- Transmitting and receiving files
- Database and disk access
- Business logic