A cross-cutting concern is some software concern (synchronization, logging, memory allocation, NetworkTransparency, UI preferences) that is for the most part outside of (and orthogonal to) the ProblemDomain a software component/module is concerned with, but important nonetheless. Many different techniques have been developed to deal with these--some good, some bad, some UgLy.
Techniques include:
- TemplateMetaprogramming, augmented with PolicyObject (such as StandardTemplateLibrary allocators)
- MetaObjectProtocols, in particular things like before functions, after functions, etc.
- Decorators (both DecoratorPattern and the language feature in Java), delegation in general.
- TemplateMethodPattern (i.e. use of HookMethods)
- RPC tools
- Many of the CreationalPatterns can be used to allow variation of some cross-cutting concern at runtime.
- MultipleInheritance and MixIns
- ContextObject or ExplicitManagementOfImplicitContext
A programming paradigm dealing with this stuff is AspectOrientedProgramming.
A few bad techniques for dealing with CrossCuttingConcerns include:
- GrandCentralStation (aggregating lots of independent domain functionality into a BigBallOfMud just so the CrossCuttingConcern(s) can be dealt with in one place).
See also: VariationsTendTowardCartesianProduct
CategoryComplexity, CategoryInfoPackaging CategoryAspectOrientation