From: Shin-ichiro Hara Date: 1997-03-30T18:36:09+09:00 Subject: [ruby-list:2505] Re: WWW library (Re: class design) 原です。 > まつもと ゆきひろです > トップダウンで考えると,まず > > URL.open(url) > > で基本的なメソッドを実装したオブジェクトを返すわけですね.と > なると考えなくてはいけないのは,その返って来るオブジェクトが > 実装すべきメソッドはなんであるかですね. えーと、混乱を避けるために url を表す文字列を urlspec、URL クラスのインスタンスを url と書くことにします。 で、ここでひとつ考えるべき事は接続の必要のないメソッドと、 接続したのちのメソッドを同じクラスの中にいれてしまうかど うかです。例えば、 url = URL.new("http://www.ruby.com/man/foo.html") url1 = url.abs_url("../bar.html") とすると url1 は http://www.ruby.com/bar.html になるという 様な、全体パス生成メソッドみたいなのは、接続はいらないわけ です。 一つの案は、URL と URLConnection の二つに分けて、 url = URL.new(urlspec) urlConn = url.connect # <= URLConnection のインスタンス をもって、urlConn = URL.open(ulrspec) 相当とするというの もありえるかと。URL クラス一本でいけるならそれに越したこと は無いのですけど。 ちなみに Java では、 URL url = new URL(urlspec); URLConnection urlConn = url.openConnection(); InputStream urlStream = urlConn.getInputStream(); と3段構えにできたりして、拡張はしやすいかも。 url.getContent() という様な、いきなりのショートカット も備えていていたれりつくせりですね。 > んで,各スキームのハンドラを書かないといけないわけですが,ス > キーム毎にプロトコルも違うし,proxyのこともありますし,なか そうだ、proxy もありましたね。キャッシュの問題もある。考え るべき事はたくさんある。 > なかつらいかも.とりあえずはMMMのようにはhttp用のハンドラだ > け用意して,他のスキームはproxyでhttpに変換してもらっても良 > いかも知れません. MMM ってなんでしょう?