python - 在 Flask 应用程序中的模块之间共享对象
问题描述
我以 DDD 的方式布置了我的东西。有存储库来保存我的对象,服务来添加外部功能等。
然而,尚不清楚在控制器之间共享这些的最佳方式是什么?在 C# 中,我有一个依赖注入框架和一个服务器实例。Python 是鸭式的,似乎不需要太多的 DI。然而,仍然存在如何获取共享对象的问题,这将在请求之间持续存在。
到目前为止,我一直将它们挂在我的应用程序对象上,但似乎应该有一种更优雅和标准的方式来做到这一点。
我特别询问共享对象,这些对象向应用程序添加行为并且可以在应用程序的不同位置调用,而不是在请求之间共享或更改数据。
解决方案
常见的方法似乎是
- 在单个模块中初始化您的对象
- 让所有其他模块从该模块导入相同的对象
例如定义repositories.py
customer_repository = CustomerRepository(options)
...
并且在service.py
from repositories import customer_repository
customer_repository.find(id==5)
通常导入是缓存的,因此所有模块都应该导入对象的相同实例。无论如何,由于您正在执行 DDD,因此这些对象可能无论如何都应该是无状态的。
您永远不应该对将更改的共享数据执行此操作,因为全局数据在 Web 应用程序中不是线程安全的。如果要在请求之间共享数据,请使用数据库或其他外部数据存储。
推荐阅读
- javascript - Adobe 表单字段的 Javascript 验证 - 电子邮件抄送(多个电子邮件输入)
- node.js - 在 express 中设置默认查询
- github - 如何在 Markdown 文件的代码部分中插入 GitHub 表情符号?
- python - 如何绘制 200 个周期,每个周期在 matplotlib 中有 200 个值的列表
- python - Selenium 不使用默认 Chrome 配置文件
- javascript - 无法解析模块说明符“babel-runtime/regenerator”
- python - 使每 2 行交错的 tkinter 网格
- r - 为什么我不安装包“plotGoogleMaps”?
- hugo - 用于登录、注销的 Hugo 动态导航栏菜单项
- javascript - 为什么 forEach 和 for...of 与异步函数的工作方式不同?