Domain Driven Design
We can use a layered domain driven architecture as a tool for structuring our large-scale functional programs in a modular and composable manner. This architecture helps us visualize the separate application concerns and enables us to write Go code whose source code dependencies only point inwards.
All references, that is, import statements must point inwards. An import domain statement can be found in all other packages. Import use cases can be found in the interfaces and infrastructure packages. Import interfaces can be found in the infrastructure package and no package (except the import_test
package that we'll cover later) is permitted to import the infrastructure package:
The preceding diagram is somewhat of a paradox. The more we move inwards, the higher level our software becomes. The domain entities are high-level concepts. Whereas, the more we move outwards, the more low-level our software is. The infrastructure is where we interact with the filesystem, cloud...