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.

