用应用工厂重构 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
工厂函数只负责「组装」,不负责「运行」。每个步骤都可以单独测试,也可以按环境替换实现。
可验证的收益
- 测试可以为每个用例创建独立数据库
- 开发、测试、生产配置互不污染
- 扩展初始化顺序集中管理,循环引用自然消失
小结
架构不是为了让代码看起来更复杂,而是为了让下一次修改更便宜。应用工厂是这笔投资里回报最快的一步。