The folder where we keep all of our systems.
We can imagine the
systems folder as a set of "shelves", which hold all of the systems in a workspace.
A system is where we combine a set of building blocks into a deployable artefact. They are how we turn the monolithic development experience (having all our building blocks in one environment), into horizontally scalability, through the posibility to build and deploy multiple artefacts.
Each system in
systems has a minimal project structure; with a
build.sh file, a
project.clj file, a
resources folder, and a
src folder. Making each system a project allows us to compile them as individual artefacts.
This assembly of selected building blocks into one system is achieved through the magic of symbolic links (notice the little arrows on the
src folders). The symbolic links refer to the corresponding folders for each component and base, which live in their respective "drawers". For example, the
user symbolic link in
systems/realworld-backend/src/clojure/realworld/user points to the
Environments and systems are similar but have different purposes. Environments are used to develop code and therefore includes tests. Systems don't have tests but can build deployables. Systems can only have one base, but environments can have several bases.
Environments can also be used to execute code that you don’t want to deploy or mix with production code. For example, this could be scripts that fix problems with data, or exploratory code that explores external API’s.