There is much talk nowadays about Functional Programming, Domain-Driven Design and other concepts that aren’t so new as well. In this post I will give an overview of each of them.
Aspect-Oriented Programming (AOP)
AOP is a programming paradigm that enables the proper separation of responsibilities, considering features that are essential to a group of objects, but they are not their direct responsibility.
AOP allows, among other things, that you intercept a method and do something before, during and / or after the execution of the method. It is helpful to prevent the code repeat in various parts of the system.
AOP Examples of use: Log generation, access control and exception handling, transactions.
AOP Examples of tools: AspectJ and Spring AOP (Java), Aspect#, Aspect.NET and PostSharp (.NET)
It’s a programming paradigm that treats computation as an evaluation of mathematical functions and avoids changing-state and mutable data, which are characteristic of imperative programming. It emphasizes the application of functions, in order to obtain the function value for a given set of parameters involves not only to apply the rules of that function, but also make use of other functions.