用应用工厂重构 Flask 项目:从能跑到好维护

应用工厂不是形式主义,它把创建与运行拆开,让测试、配置与扩展初始化变得可控。

用应用工厂重构 Flask 项目

很多人写 Flask 的第一版都是「一个文件跑通全部功能」。当项目只有几个路由时这没有问题,但一旦引入数据库、登录、缓存和后台,模块之间的依赖会迅速变得难以追踪。

问题从哪里开始

典型的单文件写法通常长这样:

app = Flask(__name__)
app.secret_key = "dev"
db = SQLAlchemy(app)

这段代码有两个隐患:模块导入时就把应用创建出来,测试无法获得独立实例;扩展和模型互相引用,最终形成循环依赖。

应用工厂的边界

def create_app(config_name=None):
    app = Flask(__name__)
    app.config.from_object(get_config(config_name))
    init_extensions(app)
    register_blueprints(app)
    return app

工厂函数只负责「组装」,不负责「运行」。每个步骤都可以单独测试,也可以按环境替换实现。

可验证的收益

  • 测试可以为每个用例创建独立数据库
  • 开发、测试、生产配置互不污染
  • 扩展初始化顺序集中管理,循环引用自然消失

小结

架构不是为了让代码看起来更复杂,而是为了让下一次修改更便宜。应用工厂是这笔投资里回报最快的一步。