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() {
// ...
}
}