Whereas the Structure tab shows you how your codebase is structured, and automatically arranges the items into levels based on their dependencies at every scope, the Overlays tab is where you can takeover and define how the dependency levels should be. In effect this lets you document, specify and constrain dependencies.

There are 2 sub-tabs to the Overlays tab; the Structure Spec and the Architecture Diagrams.

These are similar in many ways - they both let you define the allowable dependencies between groups of classes - only you can change the levels. You can also use "visibility" to further constrain dependencies. As the codebase changes (or you change the current action list), any "violations" to the constraints is shown on the overlays.

But there are important differences.

The Structure Spec is locked to the actual structure of your codebase - it basically follows the same containment breakout as the LSM on the Structure tab, though not to the same depth. There is only one actual structure, so only one Structure Spec.

Architecture Diagrams on the other hand have no such restrictions. The "cells" on an Architecture Diagram may correspond to a single physical item in your structure, but the code items that map to cells are defined by a pattern associated with each cell. This means that you can create arbitrary groupings of items that cut across the actual structure, and establish dependency constraints between those groups. You can create any number of Architecture Diagrams, each defining a number of dependency rules.

The Structure Spec can also be tightly integrated with the "Structure Map" in Structure101 Workspace, letting developers visualize and browse their workspace, through the specified architecture, and navigate to/from the code right inside their IDE/editor.

Architecture Diagrams can also be shared to Structure101 Workspace, where the rules they express are checked as the code is edited, though they are a lot less interactive than the Structure Spec.

 

Tip:

As a rule of thumb, if what you are trying to specify can be specified in the Structure Spec, they you should put it there. Save Architecture Diagrams for constraints that you cannot express in the Structure Spec.