Applications
Of all the aspects of a software system, maintenance is the most costly. The never-ending parade of new features and the inevitable trail of defects and corrections consume vast amounts of human resources. The primary cost of maintenance is in spelunking and risk. Spelunking is the cost of digging through the existing software, trying to determine the best place and the best strategy to add a new feature or to repair a defect. While making such changes, the likelihood of creating inadvertent defects is always there, adding to the cost of risk. A carefully thought-through architecture vastly mitigates these costs. By separating the system into components, and isolating those components through stable interfaces, it is possible to illuminate the pathways for future features and greatly reduce the risk of inadvertent breakage.
— Robert C. Martin
Using any shared library or framework is a kind of maintenance. If we can't understand and configure it, we throw it away. So to speed up the understanding of “how it works”, the matcha project has a subproject called apps.
The apps project is a parent for all customization for core modules. It needs for end-to-end testing and show how to can be used shared modules from core. The apps project contains customization for entities, interactors, adapters and have special main parent module for primary adapters location and main projects. They need for use customization on several different environments and different configuration.
Project Structure
apps project contents following type of modules:
-
Main projects are build of target apps. These projects should provide several variants of use core and apps customized components for show possible set configuration of use.
-
Frontend projects provide the implementation of the frontend application. Macha is a Java project and does not provide a complete set for implementing the frontend. Therefore, these frontend modules should use common libraries from other projects. Ideally, they should only have customization code that correspond to macha project.
-
Core customization modules extend the existing functionality of the core to implement custom logic in accordance with customer requirements: