Cross Cutting
From Wikipedia, the free encyclopedia
- For other uses, see Cross cut.
Contents |
[edit] Cross cutting
Even though most classes in an object-oriented programming model will perform a single, specific function, they often share common, secondary requirements with other classes. These secondary requirements are said to cross-cut into the primary requirements.
For example, a typical application comprises cross cutting concerns like logging within the data access layer and also in the user interface layer whenever a thread enters or exits a method. Even though the primary functionality of each class is very different, the code needed to perform the secondary functionality, in this case, logging, is often identical.
[edit] Example code
public class SomeBusinessClass extends OtherBusinessClass { // Core data members // Other data members: Log stream, data-consistency flag // Override methods in the base class public void performSomeOperation(SomeOperationInformation info) { // Ensure authentication // Ensure info satisfies contracts // Lock the object to ensure data-consistency in case other // threads access it // Ensure the cache is up to date // Log the start of operation // ==== Perform the core operation ==== // // // // ==== End performing the core operation ==== // Log the completion of operation // Unlock the object } // More operations similar to above public void save(PersitanceStorage ps) { } public void load(PersitanceStorage ps) { } }
In the code above, we must consider at least three issues:
- Other data members do not belong to this class's core concern.
- Implementation of performSomeOperation() seems to do more than perform the core operation; it seems to handle the peripheral data logging, authentication, multithread safety, contract validation, and cache management concerns. In addition, many of these peripheral concerns would likewise apply to other classes.
- It is not clear if save() and load() performing persistence management should form the core part of the class.