A demonstration of architectural agility
The following information explains how the simple sample application demonstrates several of the practices of agile architecture. As the example evolves, so will the explanations.
The system grew from a small and simple working system that worked.
The system is carefully architected at all levels. Class relationships are decoupled and package and module (ie. JAR) relationships are also very carefully managed.
JarAnalyzer, an open source software visualization tool for the Java platform, is used to generate visualizations that allow the team to clearly see the relationships between system entities at many different levels. JarAnalyzer also generates architectural metrics.
One way the architecture is enforced is via the build scripts and structure of the source code repository. The system has separate build scripts for each component. You can see his by looking in the subdirectories under the src directory.
This is ongoing, and we will highlight refactorings as the example evolves. But the visualizations and validations will help guide these refactorings, including the metrics generated by JarAnalyzer.
The system started as a simple system that worked, with no unnecessary complexity.
To see the sample in action, clone this repository and run the build scripts in each subdirectory. Then, execute the run.sh shell script.
Requirements: - Java 1.8 ++ - Gradle for builds - GraphViz for visualization