netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-06-27 [長年日記] ▲
_ [hyCalendar][お知らせ] hyCalendar 1.3.8 リリース ▲
目立つバグ入りのバージョンが各所で配られっぱなしというのも良くないので,とりあえず昨日発見した問題2件+新たに見つけた2件の計4件の修正でリリースしました.ご迷惑をおかけして申し訳ありません.
_ [AspectJ][読書] AspectJ Cookbook オンライン版を読む ▲
ACM から,書籍の中身をオンラインで全文読めるサービスの案内が届いてたので,使ってみた.それなりに本の種類が多く,オライリーの一部の本なんかも無料で読める.当然ながら英語版しかないけど,PDFじゃなくて普通にHTMLとして供給される上,「よく似た文章が他の本にもあるよ」と通知が出たりするので,けっこう面白いサービスだと思う.
で,AspectJ Cookbook を見つけたので読んでみた.ほとんどのレシピは当たり前というか,各ポイントカット定義の使い方の例示みたいなものばかりだったのだけど,1つだけ面白いのを見つけた.プロパティの値管理にアスペクトを使おうというもの.
staticinitialization(Main)
なんかを捕まえて設定値のロードを行っておく.そして,プロパティの値を使うオブジェクトが生成されたとき(execution(public MyClass.new(..))
)オブジェクトに設定値をセットしにいく.これによって,利用者側がConfigFile.getInstance().getSomeProperty()
といった形で設定を読みにいく必要がなくなり,設定を格納したオブジェクトへの依存関係を削ることができる.
設定値の変更にも,set(int Main.someProperty)
のように代入を監視することで対応できるので,設定ファイルの読み書き処理と利用者側の各クラスとを完全に切り離すことができる.
この方法を使うと,プロパティの値に依存して動くクラス群のテストなんかが楽になりそう.普通なら,設定ファイルに値を読みに行く処理をモックで差し替えるとか,様々な設定値のファイルを用意しておくとかになってしまうところが,単にテスト用コードが「アスペクトが読んでセットしてくれるはずのプロパティ」の値を代理でセットしにいくだけで良くなる.
「誰がこのフィールドに値をセットするんだ?」とか混乱は起こりそうだけど,そこはちゃんとドキュメントするなり,Java ならアトリビュート使って「これはアスペクトにセットしてもらいますよ」と明示するなりして使えば何とかなりそう.
この設定値の管理アスペクトは,「システムのあちこちで共有のパッシブなオブジェクトを使う」というのを,「システムの動作中の適切な時点でアスペクトが勝手に動く」という形で置き換えている,ロギングとよく似たパターンであるという気がする.fan-in analysis によるアスペクトマイニングで出てくる候補というのが,実はこの種の処理だったりするのかもしれない.
この設定値の管理方法,既に山ほど設定項目の入った設定ファイルクラスを持ってる身としては,すごく便利そうだなーと思ってしまう.Delphi用のアスペクト指向環境があったら喜んで使っていそう.