AOP(面向切面)的粗俗理解
百度百科的解释:AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
一个比较绕的概念,简单来说就是把不影响业务流程的功能独立封装出来,不用在需要使用该功能的方法中显示调用该方法。
代码为例:
public void Edit(Book book) { //验证用户是否有权限的代码 //方法的主体逻辑 //记录操作日志的代码 }
在上面的方法中,只有主体逻辑才是这个方法的核心,权限和日志都不影响该逻辑的具体实现,如果把具体方法都写在这里则会显得臃肿,同时耦合度很高,如果出现多个地方拥有相同代码一旦变更则变得很麻烦,我们可以将权限和日志拆分成两个独立方法,封装到不同类里面去,从而使得方法内部耦合性降低,方法和类的功能单一。
public class Role
{ public static bool IsOk(User user)
{ //验证权限的具体代码 } } ; public class Log
{ public static void LogText(User user,Book book)
{ //记录日志的具体代码 } } ; /*上文提到的方法*/ public void Edit(Book book)
{ if(Role.IsOk(Session["User"])) { // do something... }else{ // do something... } //方法的主体逻辑 Log.LogText(Session["User"],book); }
以上是常规方法中用到的解耦方法,而有了AOP之后怎么做呢,拿过ASP.NET MVC的滤器举例
public class RoleFilterAttribute : ActionFilterAttribute { public override void OnActionExcuting(ActionExecutingContext filterContext) { //验证权限代码 } }; public class LogFilterAttribute : ActionFilterAttribute { public override void OnActionExcuted(ActionExecutingContext filterContext) { //记录日志代码 } }; /*原来的方法*/ [LogFilter] [RoleFilter] public void Edit(Book book){ //主体逻辑 }
有了切面之后,跟主体逻辑无关的变更只需要在过滤器中更改就可以了,原来的方法去除这些无关的功能后代码显得更清晰。
至于过滤器怎么实现在Eidt执行前调用权限验证或者在执行结束后记录日志,则已经超出面向切面概念的理解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库