关于AOP
Aop的横切,可以将核心业务逻辑抽离出来, 可以在以下类似情况使用如日志、权限、数据持久
attribute 方式实现:
[log]
[rosle]
public void test(){} 的形式, 然而此种形式如何传递上下文?
例如不用Aop则应该如此
public void test()
{
if(User.isRosle){
try{
//核心 逻辑代码
//核心逻辑代码
}
catch{
Log.execl("...");
}
finall{Log.execl("....");}
}
}
由此可以看到如果利用attribute 可以看到 把User.IsRosle的属性或方法放入到特性中,然而通常需要(业务逻辑时可能需要 将核心业务逻辑 ,也有可能不需要涉及核心业务逻辑,因为如果涉及核心逻辑的上下文,不合适AOP设计原则,但仍旧涉及一定的上下文)的上下文的注入。
目前在.Net下实现AOP的方式分为两大类:
一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代或修饰原有对象行为的执行;
二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
动态代理实现方式利用.Net的Attribute和.Net Remoting的代理技术,对对象执行期间的上下文消息进行截取,并以消息传递的方式执行,从而可以在执行期间加入相关处理逻辑实现面向方面的功能(请参考:http://www.cnblogs.com/wayfarer/articles/256909.html);
而静态织入的方式实现一般是要依靠一些第三方框架提供特定的语法,例如PostSharp,它的实现方式是采用 MSIL Injection和MSBuild Task在编译时置入方面的代码,从而实现AOP。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架