在Flask应用中的模块之间共享对象

时间:2018-07-11 13:03:12

标签: python flask domain-driven-design

我已经以DDD方式布置了我的东西。有存储我的对象的存储库,提供外部功能的服务等。

但是,尚不清楚在控制器之间共享这些内容的最佳方法是什么?在C#中,我将有一个依赖项注入框架和一个服务器实例。 Python是鸭子类型的,似乎不需要很多DI。但是,仍然存在如何获取共享对象的问题,该问题将在请求之间持续存在。

到目前为止,我一直将它们挂在我的应用程序对象之外,但是似乎应该有一种更优雅,更标准的方法。

我专门问有关共享对象的信息,这些对象可以为应用添加行为,并且可以在应用中的不同位置调用,而不是关于在之间共享或更改数据的请求。

1 个答案:

答案 0 :(得分:3)

常见的方法似乎是

  • 在单个模块中初始化对象
  • 让所有其他模块从该模块导入同一对象

例如定义repositories.py

customer_repository = CustomerRepository(options)
...

service.py

from repositories import customer_repository
customer_repository.find(id==5)

通常为imports are cached,因此所有模块都应导入对象的相同实例。无论如何,由于您正在执行DDD,所以这些对象无论如何都应该是无状态的。

永远不要对将更改为global data is not thread safe in web applications的共享 数据执行此操作。如果要在请求之间共享数据,请使用数据库或其他外部数据存储。