moveメソッドの定義場所

同じ処理を何回も書くのは嫌いなので、メソッドに括りだしてしまったほうがいいね。使い回しも利くし。世の中にはDRYというコトバもあることだし。自分でモジュールを書くようになると、再利用性の素晴らしさが身に沁みて実感できる。

moveメソッドをどこで定義するかちょっと悩んでる。Tangerine.pmで定義するか、T::Plugin::Baseで定義するか。T::P::Baseで定義すると、モジュールを使う側で1箇所だけとはいえあまりにも不自然な呼び出し方になるから、Tangerine.pmで定義しておいて、T::P::BaseはTangerine.pmを継承しているのがいまの実装。だけど、T::P::Baseがすべてのプラグインスーパークラスであることを考えると、moveメソッドは当然T::P::Baseで定義してあるほうが自然なんだよね。逆にTangerine.pmをT::P::Baseから継承するのも不自然だし。サブクラスのプラグイン固有のメソッドもいくつかある*1けど、プラグインごとに異なるデータを持たせる必要があるコンストラクタ以外はほとんど全部T::P::Baseから継承してるから、できればT::P::Baseに定義させたいんだけどなぁ。どうしようかなぁ…。

追記 [10/06 06:55]

結局moveメソッドはT::P::Baseで定義することにしちゃった。よく考えたら、全てのプラグインが失敗したときにのみ適用するプラグインT::P::NoMatchがあればいいわけで。T::P::NoMatchを実装して、T::P::Baseから継承。これでスマートな解決になったかな。

*1:getCategoryメソッドとか、T::P::Baseで実装された汎用メソッドでないプラグイン固有のdestメソッドとか