アスペクト指向デザインパターンの適用の困難と恐怖: Visitor パターンの場合

今、ちょうどアスペクト指向な Visitor パターンを適用できる状態なんだけど、スムーズに悩むことなく適用できそうでもない。


この困難さ or 恐怖(先が見えない)の理由の1つは、設計空間の大きさ(or 選択肢の多さ)から来ているように感じる。

主な選択肢には以下のようなものがある:

  1. 自分の書いた「AspectJ を使ったデザインパターンの改善と支援」の「Visitor」の部分
  2. Hannemann と Kiczales さんらの「Design Pattern Implementation in Java and AspectJ
  3. 普通のオブジェクト指向 Visitor の実装
  4. Christian Grothoff 氏の「Walkabout revisited: The Runabout」の Runabout
  5. Yun Mai and Michel de Champlain らの「A Pattern Language To Visitors

明らかに(もちろん実装慣れしているひとにとっては、違うと思うけど)、選択肢の幅は多い。多くの人にとっては、GoF の実装だけが選択肢になるのかもしれないけど、中途半端に知識があると、どれが良いのか悩む。


一つずつ検討していってみると:
まず僕の書いた「1」だけど、、、欠点は:

  • 分かりにくい。自分でも久しぶりに読むのでわかりにくい。文章の解説がないとわからん。コードだけで読み取れると思うな!>僕
  • 使いにくい。リファレンスとして使えない。利点とか欠点とかを書いてない。

「2」は、基本的には、再利用可能な Visitor となるのだけど、あまり使いたくない。理由としては、大げさな再利用な気がする。確かキャスト使ってたのでそのへんが嫌。でも、実際の使い心地を検証するいい機会ではある。

「3」は、一番ポピュラー。利点も欠点も実装後の設計の流れもだいたい予測できる。一番の安全策。

「4」の Runabout は、微妙。使っても良いかもしれないけど、一度だけでも簡単な例で試してみて自身をつけてから、実践的に使ったほうがいいかもしれない。

「5」は、、、微妙。読んだけど内容忘れた。でも、選択肢として無視してもいいのかどうか悩む。


恐らく、フォースとなるのは:

  • 実際の製品を作っているわけではないが(単なる学校でのアプリ製作)、どーでもいい使い捨てのアプリということでない。ので、後から、変更がしにくいとかいうのはなるべく避けたい。


どうすれば?


まず「3」の GoF の選択肢は、やめる。アスペクト指向をそれなりに実践的に試すチャンスなので、このチャンスは見逃さない。

やりたくないけど、やったほうがいいのかな、と思う行動は:

  • Runabout を簡単な例で使ってみて、雰囲気をつかむ。
  • 「A Pattern Language To Visitors」を再読する。
  • Hannemann と Kiczales さんらの実装を試しに使ってみる。
  • 僕の書いたのを見ながら一つ一つ検討していってみる。

まじ、めんどくさいな。