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