何为AOP
面向切面编程(AOP,Aspect Oriented Programming)是一种编程范式,允许开发者在不修改原有代码的情况下,为程序添加额外的功能。
什么是面向切面编程?
AOP的核心概念是切面(Aspect),它表示在程序中跨越多个功能模块的关注点。例如,日志记录、事务管理和权限控制等功能都可以视为切面。通过将这些关注点从业务逻辑中分离出来,实现对程序行为的模块化,从而提高代码的可读性和可维护性。
关键词:关注点分离,核心逻辑和非核心逻辑分离,核心关注点和切面关注点
核心概念
切面就是分布在各个业务模块里的非核心模块,大部分业务流程里都存在,因此aop就是为了把这些非核心逻辑关注点分离出来,比如日志模块。
在我们执行核心业务逻辑前后可以执行切面逻辑。
整个框架核心概念包括切面,切入点,通知,具体位置见下节。
- 切入点就是目标函数,核心逻辑
- 通知包括前置通知,后置通知,环绕通知(同时存在前置通知和后置通知)
图形化展示切面

AOP框架代码实现-C++11
参考《深入应用C++11代码优化与工程级别应用》
#include<type_traits>
#include<iostream>
#define HAS_MEMBER(member)\
template <typename T, typename... Args>\
struct has_member_##member\
{\
private:\
template <typename U>\
static auto Check(int) -> decltype(std::declval<U>().member(std::declval<Args>()...), std::true_type());\
template <typename U>\
static std::false_type Check(...);\
public:\
enum {value = std::is_same<decltype(Check<T>(0)), std::true_type>::value};\
};\
HAS_MEMBER(Before)
HAS_MEMBER(After)
#if 1
template <typename Func, typename... Args>
struct Aspect
{
Aspect(Func&& f) : m_func(std::forward<Func>

文章介绍了面向切面编程(AOP)的概念,强调了切面在程序设计中的重要性,以及如何通过AOP将非核心逻辑关注点如日志、事务管理等从核心业务中分离。文中提供了一个C++11实现的AOP框架示例,展示了如何利用SFINAE技术处理包含Before和After方法的切面,以及只包含其中之一的场景,以实现更灵活的代码结构和功能插拔。
最低0.47元/天 解锁文章
2142

被折叠的 条评论
为什么被折叠?



