我了解面向对象的编程,并且已经编写了很长时间的 OO 程序。人们似乎在谈论面向方面的编程,但我从未真正了解它是什么或如何使用它。什么是基本范式?
这个问题是相关的,但并不完全问它:
面向方面编程与面向对象编程
AOP 解决了横切关注点的问题, 横切关注点 可以是任何类型的代码,它以不同的方法重复,并且通常不能完全重构到自己的模块中,例如日志记录或验证。因此,使用 AOP,您可以将这些内容从主代码中删除并垂直定义它,如下所示:
function mainProgram() { var x = foo(); doSomethingWith(x); return x; } aspect logging { before (mainProgram is called): { log.Write("entering mainProgram"); } after (mainProgram is called): { log.Write( "exiting mainProgram with return value of " + mainProgram.returnValue); } } aspect verification { before (doSomethingWith is called): { if (doSomethingWith.arguments[0] == null) { throw NullArgumentException(); } if (!doSomethingWith.caller.isAuthenticated) { throw Securityexception(); } } }
然后使用 aspect-weaver 将代码编译成这样:
function mainProgram() { log.Write("entering mainProgram"); var x = foo(); if (x == null) throw NullArgumentException(); if (!mainProgramIsAuthenticated()) throw Securityexception(); doSomethingWith(x); log.Write("exiting mainProgram with return value of "+ x); return x; }