ワークステートエンジン欲すぃ。

やっぱりRailsにワークステートエンジンが欲しいよなー。blog程度のものを作ってても思う。 id:moro さんがワークステートエンジン、ワークステートエンジンといってた理由が脳に少しだけ染みわたってきた。

モデルオブジェクトにメッセージを送ったときに、他のオブジェクトに連鎖的に副作用が波及するのは別にいいんだ。それがオブジェクト指向だし。そうやって自律的なオブジェクトの間でメッセージが飛び交って、その結果として処理が為されていくっていうのはSmalltalkの意味でのOOから言って正しい。

で、ActiveRecordの、ビジネスロジックを全部モデルオブジェクトに詰め込むやりかたはこのOOと相性がいいと思う。そのやりかたを徹底する限り、ビジネスロジックはモデルオブジェクト同士のメッセージングの連鎖で表現するしかないんだもの。

問題は、「ビジネスロジックじゃないもの」だよね。自律的オブジェクトとしてそのオブジェクトの固有の性質ではないのだけれども、実際の処理にあたっては実行させたい実行手順みたいなやつ。概念分析においてはそのオブジェクトの責務では無いにもかかわらず、そのオブジェクトへのメッセージに付随して行いたい何か。

そういうものがが「ワークフロー」に関わるあたりでは頻出する。それから、あとはある種のロギングやレポーティングもここに含めてもいいかもしれない。だから、これはモデルクラスからは分離して管理したいんだよね。それでワークステートエンジンか。

とりあえずRails的には、これもorchestrationの一種だと開きなおって無理矢理Controllerに実装してしまうほうがまだましかなぁ。モデルクラスのビジネスロジックを汚染するよりはそのほうがいい。ティアを増やすのはRailsではやり辛いし、そこまで大袈裟にすることもない気がする。

DHHは「それCRUDでいいんじゃね?」というけど、でも現実にはCRUDに付随する何かしらの、概念レベルから見たら不正規なロジックが張りついていてそれを実行しなくしちゃいけないケースがあるんだよね。「現実」とか言ってる私はDHHから見るとマトリックスに支配されてるのかなぁ。赤いカプセルを飲む心の準備はできてるつもりなんだけどなぁ。

でも、やっぱりRailsがワークステートエンジンをサポートしてくれないものだろうか。そうすればきっと、綺麗に書けると思うんだけれど。