Cross-cutting concern. In aspect-oriented software development, cross-cutting concerns are aspects of a program that affect several modules, without the possibility of being encapsulated in any of them.
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.

For instance, if writing an application for handling medical records, the indexing of such records is a core concern, while logging a history of changes to the record database or user database, or an authentication system, would be cross-cutting concerns since they interact with more parts of the program.

Background
Cross-cutting concerns are parts of a program that rely on or must affect many other parts of the system. They form the basis for the development of aspects. Such cross-cutting concerns do not fit cleanly into object-oriented programming or procedural programming.

Cross-cutting concerns can be directly responsible for tangling, or system inter-dependencies, within a program. Because procedural and functional language constructs consist entirely of procedure calling, there is no semantic through which two goals (the capability to be implemented and the related cross-cutting concern) can be addressed simultaneously. As a result, the code addressing the cross-cutting concern must be scattered, or duplicated, across the various related locations, resulting in a loss of modularity.

Aspect-oriented programming aims to encapsulate cross-cutting concerns into aspects to retain modularity. This allows for the clean isolation and reuse of code addressing the cross-cutting concern. By basing designs on cross-cutting concerns, software engineering benefits can include modularity and simplified maintenance.

Examples
Examples of concerns that tend to be cross-cutting include:

 Business rules
 Caching
 Code mobility
 Data validation
 Domain-specific optimizations
 Environment variables and other global configuration settings
 Error detection and correction
 Internationalization and localization which includes Language localisation
 Information security
 Logging
 Memory management
 Monitoring
 Persistence
 Product features
 Real-time constraints
 Synchronization
 Transaction processing
 Context-sensitive help
 Privacy
 Computer security

See also
 Separation of concerns
 Aspect-oriented programming
 Code refactoring (restructuring software)
 Database normalization (minimize needlessly replicated data)
 Multiple inheritance
 Microservices
 Orthogonalization (mathematical normalization)

References

Bibliography

Further reading
Laddad, R. (2003): AspectJ in Action, Practical Aspect-Oriented Programming, Manning Publications Co.

External links
AOSD.net's glossary of aspect oriented terms (via Internet Archive Wayback Machine; AOSD.net has become Modularity).
AspectJ , an Aspect-Oriented extension to the Java programming language
Bergmans, L., M. Aksit (2001): Composing Multiple Concerns Using Composition Filters, https://web.archive.org/web/20170909131212/http://trese.cs.utwente.nl/ (24 July 2004)
Berg, K. van den, Conejero, J. and Chitchyan, R. (2005). AOSD Ontology 1.0 ‐ Public Ontology of Aspect‐Orientation. AOSD Europe Network of Excellence, http://eprints.eemcs.utwente.nl/10220/01/BergConChi2005.pdf
Here is an example of handling a cross-cutting concern: https://web.archive.org/web/20161220151503/https://www.captechconsulting.com/blogs/a-persistence-pattern-using-threadlocal-and-ejb-interceptors

Aspect-oriented software development
Aspect-oriented programming