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''''''s (such as StandardTemplateLibrary allocators) * MetaObjectProtocol''''''s, 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 HookMethod''''''s) * RPC tools * Many of the CreationalPatterns can be used to allow variation of some cross-cutting concern at runtime. * MultipleInheritance and MixIn''''''s * 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