Какая идиома лучше всего для совместного использования объекта между установленными в стойку приложениями / промежуточным ПО?
Например, на этом 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
Комментарии / предложения?
Колин