Structural patterns

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

Purpose

The following table lists each pattern in the Structural patterns category and its purpose.
Pattern Purpose
Component Cyclic Dependency A Component Cyclic Dependency is a structural antipattern consisting 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 importantly, cyclic dependencies undermine testability, parallel development, and reuse. Large-scale software with many cyclic dependencies is fragile and unstable.
Component Global Breakable A Component Global Breakable 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 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 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 is a structural antipattern for a component that has many immediate dependencies. Such a component carries excessive responsibility and is typically identified by many long methods. Breakables make the code difficult to understand, to maintain, and to reuse.
Component Local Butterfly A Component Local Butterfly 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 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, to maintain, and to reuse. Hubs also make the code fragile and unstable.
Package Cyclic Dependency A Package Cyclic Dependency is a structural antipattern consisting 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 is a structural antipattern for a package that has many global dependencies. Such a package carries excessive responsibility. It typically contains a number of components with many global dependencies.
Package Global Butterfly A Package Global Butterfly 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 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. It typically 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 to maintain.
Package Local Breakable A Package Local Breakable is a structural antipattern for a package that has many immediate dependencies. Such a package carries excessive responsibility. It typically contains a large number of components or a number of components with many immediate dependencies. A Package Local Breakable makes the code difficult to understand, to maintain, and to reuse.
Package Local Butterfly A Package Local Butterfly 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 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. It typically contains many components that can have many immediate dependencies. Hubs make the code difficult to understand, to maintain, and to reuse. Hubs also make the code fragile and unstable.
Feedback
(C) Copyright IBM Corporation 2004, 2005. All Rights Reserved.