When one or many concerns span across module its called as cross cutting.Example in our audit trail example we will probably need to audit trail for customer as well as supplier.So Audit trail can span across other objects also that is termed as cross cutting. Below are both the classes actually implemented .

If you see the “Update” method of the customer class , its doing both of the concerns that is checking

for customer code length and also maintaining the audit trail using the audit trail class.

In short the customer class is doing lot of activity. There is lot of tangling of code. So how do we overcome this problem… Simple separate the System level concern (Audit Trail) from the core level concern

( Customer code check). This is achieved at this moment in .NET using attribute programming.