DCI Meetupに参加
・・・してません。
してないけど、想像で思いの丈を書くよ。
まず、DCIについてはちょっと前にモノ思ったんだけど、togetter見る限り、疑問の一つに関してDCI Meetupで一応の回答が得られた模様。
その疑問というのは「ロールはextend Moduleではなくて、Adapterで実装してはいかんのか?」ということなんだけど、回答としては要するに「ロールが異なっても同じオブジェクトなんだからアイデンティティを同一に保ちたい」ということらしい。
ただ、言わんとすることは分かったけど、実はあんまり納得できてなくて、とあるコンテキストで何かしらのロールを果たしているオブジェクトのアイデンティティってそんなに重要なんだろうか?
ミッキーマウスがステージで踊ってるのを見るときに中の人が誰かなんてどうでもいいというか、むしろ中の人なんていないことにして見るのが正解であるように、ロールを果たしているオブジェクトが実際には何か、なんてむしろ考えずに済むのが理想だし、そのためのコンテキストじゃないかと思うんだけど。
あと例えば、とあるコンテキストにロールが二つ登場するとして、実際にはそれらの実体が同じオブジェクトになるということもあり得ると思う。そうした場合に、アイデンティティが同じということは「オブジェクト自身」はコンテキスト内で自分がどのロールを果たしているかを知らないということになる。
もちろんプログラマはそのオブジェクトを参照している変数名でロールを知ることができるんだろうけど、オブジェクト自身は普通自分がどういう変数名で参照されているかなんてわからないわけだから、自分のロールを知る術がない*1。このことは「リフレクション重要」っていうCoplien自身の言葉とずれがあるように思う。
*1:extendによる実装ではobj.my_role みたいなメソッドを実現する手段がないということです