best / most элегантный способ обмена объектами между стеком смонтированных в стойку приложений / промежуточного программного обеспечения?

Какая идиома лучше всего для совместного использования объекта между установленными в стойку приложениями / промежуточным ПО?

Например, на этом config.ru есть два приложения Sinatra, привязанные к разным конечным точкам:

class App1 < Sinatra::Base
  # ...
end

class App2 < Sinatra::Base
  # ...
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

Теперь, если этим двум приложениям необходимо совместно использовать объект, будь то соединитель базы данных или любой другой объект, какая идиома для этого лучше всего?

Я вижу в основном два варианта:

1- Создать константу на уровне config.ru и просто ссылайтесь на эту константу в приложениях. Например:

SHARED_OBJECT = "hello world"

class App1 < Sinatra::Base
  get '/' do
    SHARED_OBJECT
  end
end

class App2 < Sinatra::Base
  get '/' do
    SHARED_OBJECT
  end
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

2- Создайте одноэлементный объект на уровне config.ru и используйте его в приложениях. Например:

class SharedObject
  include Singleton

  def test
    @test ||= "hello world"
  end
end

class App1 < Sinatra::Base
  get '/' do
    SharedObject.instance.test
  end
end

class App2 < Sinatra::Base
  get '/' do
    SharedObject.instance.test
  end
end

map '/app1' do
  run App1
end

map '/app2' do
  run App2
end

Комментарии / предложения?
Колин

7
задан Colin Surprenant 1 April 2011 в 19:09
поделиться