From: James Ponder Date: 2001-04-24T00:55:52+09:00 Subject: [ruby-talk:14080] Re: OO On Mon, Apr 23, 2001 at 09:42:42AM +0900, chad fowler wrote: > What kind of data will be stored in the "Options" > object? What do the individual classes need from it? > It sounds like you are creating a static configuration > mechanism. Another coupling-related fear that I would > have is that, when you pass a full "Options" into an > object, you are probably giving that object access to > any of the data in "Options". So, you're creating > possible dependencies between every object that uses > "Options" and every possible "Option". I think I understand what you are saying, but I don't see how I can achieve this in practice. For example, my options file might contain "debug=1", and I don't want to have to alter my classes each time I come up with a new option that several classes need to know about. I've been discussing this with some Java people, and they think I should be using a "singleton" - although this word appears to be used in Ruby as a way of adding methods to objects I've not seen it used in the same way that Java people use it. Apparently in Java you do this by creating a private constructor (so that nobody can instantiate the class) and have a class variable that holds one instance of the object. The object is normally instantiated in the class init code or in a "unless(obj) obj = MyClass.new()" way within each class method. In Ruby, can you stop someone being able to instantiate an object? > The solution I would propose is that you keep > "Options" outside of any objects that don't > specifically need it. Then, from a controller object > (probably the same one that actually instantiates each > object), you can read "Options" and pass any required > data to the objects that need it. With this approach, > "Options" doesn't know about your objects, and your > objects don't know about "Options". To me, if I add an option that is applicable to one particular class, it seems bad that I have to alter the controller code, the class code AND the constructor. Or am I still thinking about this in the wrong way? Best wishes, James -- James Ponder; www.squish.net