Have you heard about AOP? AOP stands for Aspect Oriented Programming - paradigm of software development focused on separation of so-called "concerns". What’s “concern” (in this context)? It’s a part of code that’s not related directly to functional requirements but it’s crucial for overall solution