twitter にもちょいっとつぶやいたのですが、DBI 自体をいい感じに拡張できる物体があるといいなー、と思って、 試しに書いてみた。Decorator とメソッドが生えてくる Plugin 形式と両方考えて、今回は試しに Decorator でやってみた。

やりたかったこと

  • トランザクション管理とか、コネクション管理とか、そういう機能を好きな IF を選んで拡張できたらいいな
  • 拡張するのは、DBI 自体だとうれしいな

とりあえず Decorator でプラグイン一個書いてみて分かったこと。

  • むずい。何が正しいのかさっぱり分からん
  • dbh を無理やり bless し直してるんだが、これちゃんと動くんだろーか???
    • そういえば普通に SQL 投げるテスト書こうと思って書いてねーや。まあ POC なんでべつにいいか。
  • Decorator って、親とすべてのサブクラスを把握しきっていないと書きにくいなぁ
    • 自分で全部書くなら問題ないが、誰かにプラグイン書いてもらうとか無理だね
  • 多分、どういう形式でやるにしても、結局他のプラグインとの相互作用が難しい。
    • たとえば、自動再接続したら、途中のトランザクションをロールバックするとか、そういうのどうすんだろ?
    • そういうフックを Decorator の親に入れていくんだろうが、設計がムズそうだなー

あまりに面倒くさいので、「オレ好みの DBI 拡張」を書く方が良いのかもしれんなー、とも思った。柔軟性ないけど。

結論

正解はひとつ!じゃない!!(There is more than one way to do it)