AOP(Aspect-Oriented Programming)
AOP(Aspect-Oriented Programming)とは、横断的関心事(cross-cutting concerns)をコードから分離し、コードの再利用性や可読性、保守性を向上させるプログラミングパラダイムの一つです。 横断的関心事とは、複数のモジュールやクラスにまたがる機能や処理のことで、例えばログ出力、認証、トランザクション管理などがあります。1
簡単に言うと、以下のような例において、println("before") と println("after")を分離することです。
def run(): Unit = {
println("before")
// do something
println("after")
}
遅延評価を使って AOP を実現する
Scala で遅延評価をする方法は lazy
を使う方法と名前渡しパラメータ2を使う方法がありますが、ここでは後者を使います。
//(例)
def withLogging[T](f: => T): T = {
println("before")
val result = f
println("after")
result
}
def run(): Unit = withLogging {
// do something
}
この例では、ログ出力の横断的関心事が withLogging
に分離されました。これにより、ビジネスロジックと横断的関心事が分離され、コードの可読性と保守性が向上します。