首页 > 解决方案 > 在 Flask 应用程序中的模块之间共享对象

问题描述

我以 DDD 的方式布置了我的东西。有存储库来保存我的对象,服务来添加外部功能等。

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

到目前为止,我一直将它们挂在我的应用程序对象上,但似乎应该有一种更优雅和标准的方式来做到这一点。

我特别询问共享对象,这些对象向应用程序添加行为并且可以在应用程序的不同位置调用,而不是在请求之间共享或更改数据。

标签: pythonflaskdomain-driven-design

解决方案


常见的方法似乎是

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

例如定义repositories.py

customer_repository = CustomerRepository(options)
...

并且在service.py

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

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

您永远不应该对将更改的共享数据执行此操作,因为全局数据在 Web 应用程序中不是线程安全的。如果要在请求之间共享数据,请使用数据库或其他外部数据存储。


推荐阅读