2005-01-12(Wed) [長年日記]
■1  Matz meets ダイコン
 Matz meets ダイコン
今月で休刊になる『Linux magazine』の2005年2月号。やっと買った。まつもとさんがDependency Injectionコンテナを紹介している。「Java方面の人」としても嬉しいし、個人的にも嬉しい。と、いうのも本家記事から「Japanese」のリンクがなぜか消えてしまっている拙訳も「角谷さんによるその邦訳」と紹介されいるので。
Block InjectionはRuby Wayで趣ぶかい。Injectionのタイプのエッセンスを示すコンテナ実装のコードが20行ぐらいずつなのも頼もしい。
Setter Injectionのコンテナが「Yin/Yang問題」を解決できてなかったりするけど、それはPicoContainer1.1でも解決されてなかったりするし :-)本文を読み違えてました。(コードツッコミ!!*1)。PicoContainer1.1でも解決されてない「Yin/Yang問題」が解決されてます。
 「Yin/Yang問題」
「Yin/Yang問題」
ツッコミにビビってしまうチキンなわけですが、「Yin/Yang問題」と私が勝手に呼んでるだけです……。
命名の由来は、PicoContainerのSetterInjectionAdapterTestCaseの一番下にある、「PICO-188」となっているテストケースから。
このテストケースは、Setter InjectionでYinからYangを、YangからYinを取り出そうにもCyclicDependencyExceptionで落ちてしまうという問題を再現するテストケース。そこでYin(陰)とYang(陽)というクラス名を使うセンスが面白いなあ、と思ったのが記憶に残っていたので、Setter Injectionつながりで書いたという話です。オチも何にも無いという。
*1 もうしわけないです。そしてありがとうございます


 リーン開発の現場 カンバンによる大規模プロジェクトの運営(Henrik Kniberg/角谷 信太郎/市谷 聡啓/藤原 大)
リーン開発の現場 カンバンによる大規模プロジェクトの運営(Henrik Kniberg/角谷 信太郎/市谷 聡啓/藤原 大) 『なるほどUnixプロセス ― Rubyで学ぶUnixの基礎』
『なるほどUnixプロセス ― Rubyで学ぶUnixの基礎』 SCRUM BOOT CAMP THE BOOK(西村 直人/永瀬 美穂/吉羽 龍太郎)
SCRUM BOOT CAMP THE BOOK(西村 直人/永瀬 美穂/吉羽 龍太郎) 実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる(Steve Freeman/Nat Pryce/和智 右桂/高木 正弘)
実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる(Steve Freeman/Nat Pryce/和智 右桂/高木 正弘) The RSpec Book (Professional Ruby Series)(David Chelimsky/Dave Astels/Zach Dennis/角谷 信太郎/豊田 祐司/株式会社クイープ)
The RSpec Book (Professional Ruby Series)(David Chelimsky/Dave Astels/Zach Dennis/角谷 信太郎/豊田 祐司/株式会社クイープ) アジャイルサムライ−達人開発者への道−(Jonathan Rasmusson/西村 直人/角谷 信太郎/近藤 修平/角掛 拓未)
アジャイルサムライ−達人開発者への道−(Jonathan Rasmusson/西村 直人/角谷 信太郎/近藤 修平/角掛 拓未) アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~(Mike Cohn/マイク コーン/安井 力/角谷 信太郎)
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~(Mike Cohn/マイク コーン/安井 力/角谷 信太郎) インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践(Ken Pugh/角谷 信太郎(監訳)/児島 修)
インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践(Ken Pugh/角谷 信太郎(監訳)/児島 修) アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣(Venkat Subramaniam/Andy Hunt/木下 史彦/角谷 信太郎)
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣(Venkat Subramaniam/Andy Hunt/木下 史彦/角谷 信太郎) JavaからRubyへ ―マネージャのための実践移行ガイド(Bruce A. Tate/角谷 信太郎)
JavaからRubyへ ―マネージャのための実践移行ガイド(Bruce A. Tate/角谷 信太郎)










お買い上げどうも。残念ながらYin/Yan問題って知らないので、リンク教えてください。
えーと、つまり<br><br> class Yin<br> attr_accessor :yang<br> end<br> class Yang<br> attr_accessor :yin<br> end<br><br> d = DI::Container.new<br> d.register(:yin, Yin, :yang)<br> d.register(:yang, Yang, :yin)<br><br> yin = d.instance(:yin)<br> yang = d.instance(:yang)<br><br> p yin.yang == yang #(1)<br> p yang.yin == yin #(2)<br><br>が動くかって意味でしょうか > Yin/Yang問題。<br><br>Linux Magazineのサンプルコード(リスト4)はsetterを呼ぶ前に依存するオブジェクトを作っちゃうので、例外も出ず、(1)と(2)、両方ともtrue になります。つまり「解決できて」るんじゃないかと。<br><br>なんか違うのかな。
まつもとさんのコード通りです。最初の私の記述がグダグダなだけです……。