我打算使用 Flask 和 MongoDB(可能还有 Ming 作为 ODM)在 python 中编写一个 webapp。问题是我想让我的模型和控制器很好地分开,这样做的一个原因是能够在单独的组件上运行简单的单元测试。
现在这是我的问题,在请求生命周期的某个时刻,我需要连接到 MongoDB。每个请求都有一个单独的连接。Flask 提供了一个线程本地对象,它可以包含任何对请求全局的变量,这似乎是放置 mongo 连接的好地方。但是,这会在数据层和 Flask 之间产生硬依赖,这将使单独测试或运行它们变得非常困难。
所以我的问题真的是是否有一个优雅的解决方案。我自己提出了几个选项,但它们远非优雅。
首先,我可以给数据模块一个函数,告诉它从哪里获取连接对象。或者类似地给它一个可以用来获取新连接的函数。
第二种选择是创建一个模块可以用来连接到 MongoDB 的类,然后创建这个类的 2 个版本,一个使用 Flask 的全局对象,另一个只是简单地连接到 MongoDB。
这两个对我来说似乎都不是很健壮或优雅,有没有办法更好地做到这一点?