Inner Advice

微妙なアイデアだけど、メソッド内でアドバイスを定義できるとしたら?


public class MyClass {
public void method() {

{
methodA();
methodB();

} after() : call( void method*() ) {
// ログとか

} before() : call( void method*() ) {
// ログとか
}
}
private void methodA() {
// ...
}
private void methodB() {
// ...
}
}

微妙っていう意味は:

  • Q「アスペクトとしてモジュール化されていないんじゃないの? or Crosscutting Concern がモジュールとして扱われていないんじゃないの? ベースコードとアスペクトのコードが結局からまって(tangled)んじゃないの? AOP の目標に反しているんじゃないの?」A「本当に、アスペクトとしてみなさなければいけないの? AOP に従わない、他の "何か" だとみなせば、AOP にこだわる必要はないんじゃないの?」
  • Q「普通に外部にアスペクト定義すりゃいいんじゃないの?」A「メソッド内でより細かい範囲を指定できるという利点がある。たとえば、withincode よりも細かくできる」


アスペクトのバインド or 適用とかもできるかも? と思ったけど、これじゃあ Caesar と同じか:


public class MyClass {
public void method() {

{
methodA();
methodB();

} apply(Loggging);
}
private void methodA() {
// ...
}
private void methodB() {
// ...
}
}


public class MyClass {
public void method() {

deploy( new Loggging() ) { // Caesar 的方法

methodA();
methodB();
}
}
private void methodA() {
// ...
}
private void methodB() {
// ...
}
}