Catalyst::Model::Adaptorがリリースされていたので早速使ってみた。

それまでもなるたけ全てのロジックをモデルにいれようとしてたんだけど、モデル自体がCatalystにべったりで嫌な感じだったのでどうやって分けようかと考えてきた。例えばCatalystに載せたくない(メモリを食う割に、別に非同期でバッチ処理すればいいものとか)もmodelにしか生き場所がないのにCatalystから分離できないという妙な状態だったりした。

そこでCatalyst::Model::Adaptorです。Minicoの現在の開発版ツリーはそんなところからAdaptorで実装をリファクタリングしてみた。

多分ケースバイケースなんだろうけど、俺の場合は以下の数点を考慮しながらやったらいい感じになってきましたよ:

  • Minico::Business::Model::*以下にモデルを移動
  • C::M::Adaptorは一応コンストラクタとかあるからOOにしたいところだけど、そこは敢えてインスタンスを作らない
  • $cは基本的に使わない
  • $cから得られるものに関しては初期化時に保存
  • Modelの中から入れ子に呼んでいたほかのモデル($c->model('Hoge')->method())をクラスベースで呼び出す( Hoge->method())
これであとはわりと普通にうまく動いた。

それと同時にCache::Memcached::Managedを使い始めた。