isami100のSwingin' Seasar日記

2004-07-01

Aspectの乱用

koichikさんのひとりごとid:koichik:20040630でのS2DaoのAspectを使った実装についての指摘に対するひがさんのご意見。

だったらダイコン時代のAOPは、crosscutting concernなんて難しいものを捨ててしまって、単なるInterceptorで良いのではないでしょうか。

ただし、なんでもインターセプトすれば良いというものではなく、複数のクラスに汎用的に適用できる場合に使うということで良いと思います。

ひがやすおの日記

うーん。耳が痛い。w

これまで作ったログイン画面では、まったくのcore concernであるアクション(ExitやSubmit)までInterceptorで実装しちゃてます。本当は普通にActionListenerとして実装してボタンにDIすればよかったんですね。

ただ、まあやってみた結果良かったこととしては、ボタンアクションのトリガとなるポイント(ActionListener#actionPerformed)をJoinpointとして、いくつかの独立した異なる機能を意図した順番で追加できたことです。

それでも、例えばSubmitであれば本来の機能である「サービスを呼び出す」部分だけはActionとして実装すればよいのでは?とも思うのですが、ActionListener#actionPerformedはリターンがvoidなので、DummySubmitConclusionのように後処理を分離してMockを使えるようにするには、やはりこの「本来の処理」の部分もInterceptorにせざるを得ません。(たぶん)

きっと今後、現場レベルでいろんな形でAspectが使われながら淘汰されて、よしとされる使用法が確立されて行くんでしょうね。