Scalaで実現するAOP:遅延評価を使った横断的関心事の分離

April 14, 2023

Tags /

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 に分離されました。これにより、ビジネスロジックと横断的関心事が分離され、コードの可読性と保守性が向上します。

脚注


Written by Gayamasan who lives and works in Japan.