Now that we have some ideas of good project architecture, let's plan the project's reorganization. Let's list the possible workshop organization methods:
- By type
- By purpose
- By layer
- By convenience
The by type organization should be used for workshop nuts and bolts type components. Nuts and bolts are highly uniform components that have a different diameter, length, grade, and so on. We have a few good matches here, so let's list objects and interfaces that could be grouped this way:
- Motors
- Buildings
- Elevator controllers/drivers
The by purpose organization should be used for miscellaneous tools that have a common purpose. We have some good candidates for this style of organization, too:
- Transport planning (static/dynamic)
- The physical interface to an elevator
The by layer organization should be used for distinct architectural components that fit well within normal program logic. An example of this would be our physics layer, which is logically independent of other modules. The physics layer exists solely to store constants, formulas, and modeling procedures. Here, we group this by layer:
- Physics modeling
The by convenience organization should be used for common or difficult components. Executables are a good fit for this type of organization because they are always an endpoint, not a library, and don't typically fit into any other organization well:
- Simulation executable
- Analyze executable
- Physical elevator driver executable