ディーシーアイ

DCI(Data, context and interaction)とは何かということを知りたかったが、Clean Rubyを即座に買う金銭を持っていなかったので、Clean Ruby書いた人のブログっぽいのを読んだ。

http://saturnflyer.com/blog/jim/2011/09/28/4-simple-steps-extending-ruby-objects-the-tip-of-the-iceberg-with-dci/ http://saturnflyer.com/blog/jim/2011/10/04/oop-dci-and-ruby-what-your-system-is-vs-what-your-system-does/

そのオブジェクトがどうあるべきかとどう振る舞うべきかを分けろと書いてあった。 クラスには生成されるオブジェクトがどうあるべきかを記述し、どう振る舞うかはオブジェクトにそう振る舞うオブジェクトをextendすることで表現しろと。確かに人間の誕生を考えると、人間が生まれたときにAdminなのおかしいって思った。人間は人間であり、ひげおじさんや、瓦割りおじさんみたいなのは人間にextendされた後天的な役割であるなと。 Coders at Workからの引用で、

The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.

というのが紹介されており、笑えるけれども、実際DCIの例として出されていたUserモデルとかは結構それに近しいものになっていることが多々あるように感じられて、意識の低まったときにこれを思い出すと気持ちだけかもしれないが多少効果があるのでないか、と思った。まあどちらにせよ良いなって。

確かにUserモデルの例は分かりやすいし、一番最初に思い浮かんだけど、他そんなに思いつかなかった。多分綺麗に書けそうな気がするけど、経験値の低さゆえ上手く適用するシーンがそんなに思いつかない。そんな感じ。というより、http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/ にあるような、モデルの汚さをmoduleに隠しただけの表面上綺麗なクラスだけが生成されて、如何ともしがたくなる様子が想像できるという感じなのか。多分色々試してみてギョーとなって、なるほどなるほど〜〜〜〜〜〜みたいな感じになって、なるほどってなるんだと思う。とりあえず想像しやすいUserモデルとかから試していこうと思った。