backend-architecture-enforcer 是一个强制执行 FastAPI Clean Architecture 的技能,其特点是采用「阻断式校验」(BLOCKING validation)来约束代码结构。
架构分层 技能定义了四层结构:
- Routers 层:只处理 HTTP 关注点,包括请求解析与响应格式化。文件命名模式为 router_.py、routes_.py、api_*.py,以及 deps.py。
- Services 层:承载业务逻辑,包括编排、校验与转换。文件命名模式为 *_service.py。
- Repositories 层:负责数据访问,包括数据库查询与外部 API 调用。文件命名模式为 _repository.py、_repo.py。
- Models 层:定义数据结构,包括 SQLAlchemy 模型与 Pydantic schema。文件命名模式为 _model.py(ORM)、_schema.py(Pydantic)、_entity.py、_orm.py、base.py。
校验规则(阻断式) 规则覆盖的检查包括:Routers 层禁止数据库操作(No DB in Routers)、Services 层禁止 HTTPException(No HTTP in Services)、Routers 层禁止复杂业务逻辑、必须使用 Depends()(禁止直接实例化)、全局异步一致性(禁止在 async 中调用同步)、以及文件命名必须符合约定。
文件命名约定(快查)
- Routers:允许 router_.py、routes_.py、api_*.py、deps.py;禁止如 users.py、UserRouter.py。
- Services:允许 service.py;禁止如 users.py、UserService.py、service.py。
- Repositories:允许 _repository.py、repo.py;禁止如 users.py、repository*.py。
- Schemas:允许 _schema.py、_dto.py、_request.py、_response.py;禁止如 users.py、UserSchema.py。
- Models:允许 _model.py、_entity.py、*_orm.py、base.py;禁止如 users.py、UserModel.py。
层分离要点
- Routers(仅 HTTP):请求解析与响应格式化;HTTP 状态码与鉴权检查;通过 Depends() 委托给 services。
- Services(业务逻辑):校验与编排;数据转换;抛出领域异常(而非 HTTPException)。
- Repositories(数据访问):数据库查询与持久化;外部 API 调用;返回领域对象或 None。
依赖注入 示例中 deps.py 提供依赖提供者:get_user_repository 通过 Depends(get_db) 注入 AsyncSession 并返回 UserRepository;get_user_service 通过 Depends(get_user_repository) 注入 repo 并返回 UserService。router_users.py 中通过 service: UserService = Depends(get_user_service) 使用。 被阻断的 DI 模式包括:直接实例化(service = UserService())、全局实例(user_service = UserService())、缺少 Depends()(如 async def get_users(db: AsyncSession) 未使用 Depends())。
常见违规与修复方向
- 路由中出现数据库操作(db.add、db.execute)→ 移至 repository。
- 服务中抛 HTTPException → 改用领域异常。
- 未经 Depends 直接实例化 → 使用 Depends(get_service)。
- 命名错误 → 按约定重命名。
- async 中同步调用缺少 await → 补 await 或使用 executor。
异常模式 服务与仓库层定义领域异常(如继承 DomainException 的 UserNotFoundError),由 Router 捕获并转换为 HTTPException(如 404)。
异步规则 在 async 中应保持全程 await(如 await db.execute(select(User)));缺少 await 的同步调用被阻断;同步代码可借助 loop.run_in_executor(None, sync_function) 执行。
参考文档 包括 layer-rules.md(分层规则与代码示例)、dependency-injection.md(DI 模式、鉴权、使用覆盖进行测试)、violation-examples.md(常见违规与正确模式及自动修复建议)。
相关技能 clean-architecture(DDD 模式)、fastapi-advanced(高级 FastAPI 模式)、dependency-injection(DI 模式)、project-structure-enforcer(文件夹结构)。
能力细节
- layer-separation:防止路由层出现数据库操作、阻断路由处理器中的业务逻辑、确保层边界。
- dependency-injection:强制使用 FastAPI Depends()、阻止路由中直接实例化、保证可测试的代码结构。
- file-naming:强制一致的文件命名、校验 router/service/repository 命名、维护代码库一致性。
- async-patterns:检测 async 函数中的同步调用、防止 async 代码中的阻塞操作、确保异步一致性。
适用场景:实现 router-service-repository 模式、强制层分离、进行 FastAPI 架构约束与代码审查。 限制:资料未提供具体安装与使用步骤、价格、平台支持范围等信息,暂未提供。