python - 在 Flask 应用程序中的模块之间共享对象

标签 python flask domain-driven-design

我已经以某种 DDD 的方式布置了我的东西。有用于保存我的对象的存储库、用于添加外部功能的服务等。

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

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

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

最佳答案

常见的方式似乎是

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

例如定义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 .如果您想在请求之间共享数据,请使用数据库或其他外部数据存储。

关于python - 在 Flask 应用程序中的模块之间共享对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51286193/

相关文章:

python - 使用 numpy 数组与 DataFrame 屏蔽 pandas DataFrame

python - 如何将从方法获得的一列结果添加到现有数据框?

domain-driven-design - 在 CQRS 中同步查询端数据 - 不会仍然存在争用吗?

c# - 聚合根可以引用另一个根吗?

python - 一个类应该在初始化时转换参数的类型吗?如果是这样,怎么做?

Python打印函数不按顺序打印

python - SQLAlchemy 错误 : "TypeError: Additional arguments should be named <dialectname>_<argument>, got ' nullable'"

python - 使用 Flask-reSTLess 对具有关系的 POST 提出错误请求

javascript - 使用Flask return修改网页

c# - 我应该在哪里将我的实体转换为 DTO?