In
aspect-oriented software development,
cross-cutting concerns are aspects of a
program that affect other
concerns. These concerns often cannot be cleanly
decomposed from the rest of the system in both the design and implementation, and can result in either
scattering (
code duplication),
tangling (significant dependencies between systems), or both.