擅长:python、mysql、java
<p>最不耦合的解决方案是在运行时(而不是在加载时)应用路由:</p>
<pre><code>def init_app(flask_app, database_interface, filesystem_interface):
server = MyServer(database_interface, filesystem_interface)
flask_app.route('get_data', methods=['GET'])(server.get_data)
</code></pre>
<p>这是非常可测试的——只需在测试代码中使用模拟/伪造的依赖项(<code>database_interface</code>和<code>filesystem_interface</code>)调用<code>init_app()</code>,以及配置用于测试的flask应用程序(<code>app.config["TESTING"]=True</code>或类似的东西),就可以编写覆盖整个应用程序(包括flask路由)的测试。</p>
<p>唯一的缺点是这不是很“Flasky”(或者我听说过);Flasky的习惯用法是使用<code>@app.route()</code>,这是在加载时应用的,并且必然是紧密耦合的,因为依赖项是硬编码到实现中的,而不是注入到某个构造函数或工厂方法中(因此测试起来很复杂)。</p>