だいです

Re the message of ``[ruby-ext:01594] Re: require 'dir/...'?''...

matz / zetabits.com (Yukihiro Matsumoto):
> まつもと ゆきひろです
> 
> In message "[ruby-ext:01579] Re: require 'dir/...'?"
>     on 01/03/01, "Dai.K." <MAP2303 / mapletown.net> writes:

> |  3. 折衷案。
> |    require 'foo/' で foo/ 以下を全部 require するのはどうだろう?
> |    これなら 1. の提案自体を退けるのを除き、全ての反対理由が無くなっています。
> |    ですがこれは まつもとさんの賛成が必要。というわけでお伺いをたてました。
> 
> で、私が問題視してるのはここです。「全部requireする」っての
> は、上で挙げた反対理由はなくなるのかもしれませんが、新たに導
> 入する問題が多すぎです。排他できないとか、制御できないとか。

  これがちと予想外だったのでした。
  もともと a. の理由が説明されて初めて気づく理由なもんですから、制御に手間か
かるとかがもっとよろしくないと思われるとは想像できなかったわけですね。
  しょせん妥協案なんであっさり取り下げます。
# あおきさんまだがんばってるけど(^^;


  で、ここからは a vs b の話です。

  えぇと、見落としあったらすいませんが、a の理由には「長いから」に加えて、
「外向きの facade」ですか。あとは別に今のままでいいというところ。


Re the message of ``[ruby-ext:01589] Re: require 'dir/...'?''...

Kenichi Komiya <kom / mail1.accsnet.ne.jp>:
> 私はa案派なのですが、a案を支持する理由として、この他にも、b案の
> 'foo/all.rb' は実装(の都合でファイルを分割していること)を晒してい
> て具合が悪いというのもあると思います。

  膨張してディレクトリに分割、ってのは設計ミスのよーな気もしますが(^^;
  これはもし b方式をサポートすることになって require 'foo' で foo/all.rb を
読むようになれば問題ないですよね。


Re the message of ``[ruby-ext:01590] Re: require 'dir/...'?''...

keiju / ishitsuka.com (石塚圭樹):
> >私だけかもしれませんが、始めひとつのファイルで十分だった foo.rb が
> >いつの間にか膨張して foo/ を作って分割ということがわりとあるので。
> >そういう場合にもエントリーポイントを変えずに済むというのがa案(
> >「foo.rb foo/方式」)の利点のひとつだと思います。
> 
> 私もこれを積極的に使っていますし, 推薦したいですね.
> 
> というのも foo.rb foo/ 方式は, facadeパターンを想起させるからです. 
> foo.rb が facadeでfoo/の中身は家の中. いってみれば, ユーザが知るべきとこ
> ろはfoo.rbにあって, foo/* は知らなくて良いと.

  foo.rb, foo/ だと確かに foo/* を気にしなくなる効果はありそうですね。

  facade に疑問ですが、facade はひとつだけなんですか?
  RubyUnit がそんな感じですが、ある時は cui ある時は TestSuite ある時は…なん
て場合は foo.rb だと困りません? (b案支持理由追加ですね;-)

  foo/init_suite.rb
  foo/init_cui.rb
  foo/init_all.rb

  とできた方がよいでしょう。必要に応じてどれかひとつあるいは複数を require し
てもらう。この場合、最も基本的なものを外に出すのはちと対称性に欠けるきらいがあ
るので、それよりそのファイル名を foo/__init__.rb にした方がいいでしょう。

  で。Facade よりもむしろ Builder パターンと似ていると思います。
  クラスの構築でなくて、環境の構築。
  Builder クラスが foo/init_xxx 群であり、各 init_xxx ファイルが buildメソッド。
  つーと、foo/require.rb 用意して、そこで require_xxx メソッドを提供するって手
もあるかな…いや、これは面倒だな(笑)


  ところで複数ファイルから成るライブラリ書いてる人は実際どうしてるんでしょうか。
  あまりライブラリ入れてないのでどういうのがあるか知らないんですが。

  ちなみにうちの rinn は以下のようになってます。
  今は b方式(require.rb)を読む界面を提供している a方式になってますが、これで行
くか決めかねてるのでインストーラー無し。
  もう一段上にディレクトリ掘るかもしれません。その場合これは、rinn, corba のふ
たつの環境用セットアップを持った b方式になります。
# サブディレクトリの嵐の例(^^;

corba.rb
corba/require.rb
corba/base/
  require.rb union.rb  ORB.rb Object.rb const.rb primitive.rb Stub.rb
corba/idl_generated/
  require.rb IOP.rb pseudo.rb GIOP.rb IIOP.rb exception.rb

rinn.rb
rinn/require.rb
rinn/orb/
  require.rb IOR.rb ORB.rb Connection.rb
rinn/giop/
  require.rb GIOPReplyMessage.rb CDRSendBuffer.rb CDRRecvBuffer.rb
  RecvBuffer.rb CDR.rb
rinn/corba/
  require.rb GIOP.rb
rinn/orbit/
  require.rb IOR.rb Protocol.rb ORBit.rb Stub.rb