アスペクト指向デザインパターンの適用の困難と恐怖: Visitor パターンの場合
今、ちょうどアスペクト指向な Visitor パターンを適用できる状態なんだけど、スムーズに悩むことなく適用できそうでもない。
この困難さ or 恐怖(先が見えない)の理由の1つは、設計空間の大きさ(or 選択肢の多さ)から来ているように感じる。
主な選択肢には以下のようなものがある:
- 自分の書いた「AspectJ を使ったデザインパターンの改善と支援」の「Visitor」の部分
- Hannemann と Kiczales さんらの「Design Pattern Implementation in Java and AspectJ」
- 普通のオブジェクト指向 Visitor の実装
- Christian Grothoff 氏の「Walkabout revisited: The Runabout」の Runabout
- 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 さんらの実装を試しに使ってみる。
- 僕の書いたのを見ながら一つ一つ検討していってみる。
まじ、めんどくさいな。