Structural patterns

The Structural patterns rule category contains patterns that show various types of structural elements, including structural antipatterns.

Purpose

The following table lists each pattern, and its purpose, in the Structural Patterns category:
Pattern Purpose
Component Cyclic Dependency A Component Cyclic Dependency pattern is a structural antipattern that consists of interdependent components. A cyclic dependency between components is considered a major architectural flaw. Such a dependency makes the code difficult to understand and maintain. More important, cyclic dependencies compromise software testing, parallel development, and reuse. Large-scale software with many cyclic dependencies is fragile and unstable.
Component Global Breakable A Component Global Breakable pattern is a structural antipattern for a system component that is often affected when any other component is changed. Except for high-level concrete implementations, global breakables are undesirable because they indicate fragility and lack of modularity in the system.
Component Global Butterfly A Component Global Butterfly pattern is a structural pattern for an object that has many global dependents. Changes to a global butterfly often have a significant impact on the rest of the system. For this reason, a global butterfly should only be either a basic system interface or a utility class.
Component Global Hub A Component Global Hub pattern is a structural antipattern for a component that has many global dependencies and many global dependents. A global hub is often affected when anything is changed, and it affects a significant percentage of the system when it changes. Global hubs are undesirable because they indicate fragility and lack of modularity in the system.
Component Local Breakable A Component Local Breakable pattern is a structural antipattern for a component that has many immediate dependencies. Such a component carries excessive responsibility and is usually identified by many long methods. Breakables make the code difficult to understand, maintain, and reuse.
Component Local Butterfly A Component Local Butterfly pattern is a structural pattern for a component that has many immediate dependents. Changes to a local butterfly often have a significant immediate impact on the rest of the system. For this reason, a local butterfly should only be either a basic system interface or a utility class.
Component Local Hub A Component Local Hub pattern is a structural antipattern for a component that has many immediate dependencies and many immediate dependents. Such a component carries excessive responsibility and also serves as a utility or commonly used component. Hubs make the code difficult to understand, maintain, and reuse. Hubs also make the code fragile and unstable.
Package Cyclic Dependency A Package Cyclic Dependency pattern is a structural antipattern that consists of interdependent packages. A cyclic dependency between packages is considered a major architectural flaw. Such a dependency makes the code difficult to understand and to maintain. More importantly, cyclic dependencies undermine testability, parallel development, and reuse. Large-scale software with many cyclic dependencies is fragile and unstable.
Package Global Breakable A Package Global Breakable pattern is a structural antipattern for a package that has many global dependencies. Such a package carries excessive responsibility and usually contains several components with many global dependencies.
Package Global Butterfly A Package Global Butterfly pattern is a structural pattern for a package that has many global dependents. Changes to a global butterfly often have a significant impact on the rest of the system. For this reason, a global butterfly package should only consist of either basic system interfaces or utility classes.
Package Global Hub A Package Global Hub pattern is a structural antipattern for a package that has many immediate dependencies. Such a package carries globally excessive responsibility and also serves as a utility or commonly used package. The package usually contains many components that have several global dependencies and dependents. Package Global Hubs break the reusability of modules and make the code difficult to understand and maintain.
Package Local Breakable A Package Local Breakable pattern is a structural antipattern for a package that has many immediate dependencies. Such a package carries excessive responsibility. The package usually contains a large number of components or several components with many immediate dependencies. A Package Local Breakable makes the code difficult to understand, maintain, and reuse.
Package Local Butterfly A Package Local Butterfly pattern is a structural pattern for a package that has many immediate dependents. Such a package serves as a utility or commonly used package.
Package Local Hub A Package Local Hub pattern is a structural antipattern for a package that has many immediate dependencies and dependents. Such a package carries excessive responsibility and also serves as a utility or commonly used package. The package usually contains many components that can have many immediate dependencies. Hubs make the code difficult to understand, maintain, and reuse. Hubs also make the code fragile and unstable.