Semi global variables

I have an application where multiple objects are created processing
different sets of data based upon a configuration specified. Each
object uses several other objects but those objects must use the
configuration initially set up in the first primary object. Each of
the primary objects maintain their own configuration.

How can you have variables defined in the primary object that are
visible to the other objects it creates?

Don French

Well, we would need to know more to be sure. But one possibility is to
pass a reference to the primary object to all subsequent objects.

···

On Apr 25, 9:00 pm, Don French <dhf0...@gmail.com> wrote:

I have an application where multiple objects are created processing
different sets of data based upon a configuration specified. Each
object uses several other objects but those objects must use the
configuration initially set up in the first primary object. Each of
the primary objects maintain their own configuration.

How can you have variables defined in the primary object that are
visible to the other objects it creates?

That is an option but I hate to pass around that to every object.

class Driver
  def initialize
    live_data_handler = Handler.new('live')
    test_data_handler = Handler.new('test')
  end

  def handle_command
     do
       command, data = queuemanager.wait
       case command
         when 'processlive'
           live_data_handler.handle(data)
         when 'processtest'
           live_data_handler.handle(data)
       end
    until command == 'quit'
  end
end

class Handler
  def initialize(config)
   @config = getconfig(config)
   @otherconfiginfo = other
  end

  def handle(data)
    lots_of_different_objects_created(data)
  end
end

this is an example of the structure. same handler code but config
determines what to do and how.

Don French

···

On Apr 25, 9:16 pm, Intransition <transf...@gmail.com> wrote:

On Apr 25, 9:00 pm, Don French <dhf0...@gmail.com> wrote:

> I have an application where multiple objects are created processing
> different sets of data based upon a configuration specified. Each
> object uses several other objects but those objects must use the
> configuration initially set up in the first primary object. Each of
> the primary objects maintain their own configuration.

> How can you have variables defined in the primary object that are
> visible to the other objects it creates?

Well, we would need to know more to be sure. But one possibility is to
pass a reference to the primary object to all subsequent objects.

> I have an application where multiple objects are created processing
> different sets of data based upon a configuration specified. Each
> object uses several other objects but those objects must use the
> configuration initially set up in the first primary object. Each of
> the primary objects maintain their own configuration.

> How can you have variables defined in the primary object that are
> visible to the other objects it creates?

Well, we would need to know more to be sure. But one possibility is to
pass a reference to the primary object to all subsequent objects.

That is an option but I hate to pass around that to every object.

You might hate it initially but you'll be glad when coming back to the
code months later for maintenance. Using global variables of any form
makes code a) harder to read and understand and b) less flexible
(because you are bound to that exact global variable). Explicit
passing of data is the better alternative most of the time. You can
still organize it in a way that it's not too much typing overhead.

class Driver
def initialize
live_data_handler = Handler.new('live')
test_data_handler = Handler.new('test')
end

def handle_command
do
command, data = queuemanager.wait
case command
when 'processlive'
live_data_handler.handle(data)
when 'processtest'
live_data_handler.handle(data)

Shouldn't that read

test_data_handler.handle(data)

?

  end

until command == 'quit'
end
end

class Handler
def initialize(config)
@config = getconfig(config)
@otherconfiginfo = other

Where do you get that "other" from?

end

def handle(data)
lots_of_different_objects_created(data)
end
end

this is an example of the structure. same handler code but config
determines what to do and how.

Kind regards

robert

···

2010/4/26 Don French <dhf0820@gmail.com>:

On Apr 25, 9:16 pm, Intransition <transf...@gmail.com> wrote:

On Apr 25, 9:00 pm, Don French <dhf0...@gmail.com> wrote:

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Thanks. Looks like I will just create a configuration object and pass
it around.

Other is just a place holder instead of showing more of the code.
There are lots of config things that are initialized.

Don Frenc

···

On Apr 26, 9:02 am, Robert Klemme <shortcut...@googlemail.com> wrote:

2010/4/26 Don French <dhf0...@gmail.com>:

> On Apr 25, 9:16 pm, Intransition <transf...@gmail.com> wrote:
>> On Apr 25, 9:00 pm, Don French <dhf0...@gmail.com> wrote:

>> > I have an application where multiple objects are created processing
>> > different sets of data based upon a configuration specified. Each
>> > object uses several other objects but those objects must use the
>> > configuration initially set up in the first primary object. Each of
>> > the primary objects maintain their own configuration.

>> > How can you have variables defined in the primary object that are
>> > visible to the other objects it creates?

>> Well, we would need to know more to be sure. But one possibility is to
>> pass a reference to the primary object to all subsequent objects.

> That is an option but I hate to pass around that to every object.

You might hate it initially but you'll be glad when coming back to the
code months later for maintenance. Using global variables of any form
makes code a) harder to read and understand and b) less flexible
(because you are bound to that exact global variable). Explicit
passing of data is the better alternative most of the time. You can
still organize it in a way that it's not too much typing overhead.

> class Driver
> def initialize
> live_data_handler = Handler.new('live')
> test_data_handler = Handler.new('test')
> end

> def handle_command
> do
> command, data = queuemanager.wait
> case command
> when 'processlive'
> live_data_handler.handle(data)
> when 'processtest'
> live_data_handler.handle(data)

Shouldn't that read

test_data_handler.handle(data)

?

> end
> until command == 'quit'
> end
> end

> class Handler
> def initialize(config)
> @config = getconfig(config)
> @otherconfiginfo = other

Where do you get that "other" from?

> end

> def handle(data)
> lots_of_different_objects_created(data)
> end
> end

> this is an example of the structure. same handler code but config
> determines what to do and how.

Kind regards

robert

--
remember.guy do |as, often| as.you_can - without endhttp://blog.rubybestpractices.com/