A modern approach to implementing complex code is to let the system do it for you. There must be a way for the programmer to inform the system of what is desired. In the .NET Framework such cues can be given to the system by means of attributes.
Microsoft introduced attribute-based programming in Microsoft Transaction Server (MTS). The concept was that MTS, not the programmer, would implement complex tasks such as distributed transactions. The programmer would “declare” the transaction requirements for a COM class, and MTS would implement it. This use of attributes was greatly extended in the next generation of MTS, known as COM+. In MTS and COM+ attributes are stored in a separate repository, distinct from the program itself.