Какова наилучшая идиома для совместного использования объекта между приложениями/промежуточными программами, установленными в стойке?
Например, на этом 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- Создайте объект singleton на уровне 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
Комментарии/предложения?
Колин
DB = Sequel...
) вместо синглтона. _И (лично) я не вижу никакой пользы от использования одноэлементного шаблона в классе по сравнению с модулем сself.
методами. - person Phrogz   schedule 02.04.2011