FSD × GraphQL 分层结构、规范与 CRUD 最佳实践
本指南面向中大型 React 前端项目,结合 FSD(Feature-Sliced Design)与 GraphQL,从分层结构、目录规范、代码模板到错误对照组,给出最优落地方案。内容包含完整 CRUD(增删改查)场景,每层示例通俗易懂,便于团队参考与实践。
一、全局项目结构(FSD × GraphQL)
1 | my-app/ |
二、CRUD 典型业务(以 User 管理为例)
1. GraphQL schema 层(后端或 mock 层)
正确(最优)
1 | # service-api/graphql/schema.graphql |
错误对照
1 | type User { |
2. GraphQL resolver 层(后端或 mock 层)
正确(最优)
1 | const resolvers = { |
错误对照
1 | const resolvers = { |
3. service-api 层(前端 GraphQL client 配置)
正确(最优)
1 | // service-api/client.ts |
错误对照
1 | // service-api/client.ts |
4. entities 层(领域模型/数据 hooks)
正确(最优)
1 | // entities/user/model.ts |
错误对照
1 | // entities/user/api.ts |
5. features 层(业务能力,如表单、列表操作)
正确(最优)
1 | // features/CreateUserForm/index.tsx |
错误对照
1 | // features/CreateUserForm/index.tsx |
6. widgets 层(复合 UI 场景,如 User 管理面板)
正确(最优)
1 | // widgets/UserPanel/index.tsx |
错误对照
1 | // widgets/UserPanel/index.tsx |
7. pages 层(页面拼装)
正确(最优)
1 | // pages/UserManagePage/index.tsx |
错误对照
1 | // pages/UserManagePage/index.tsx |
8. shared 层(通用能力)
正确(最优)
1 | // shared/ui/Button.tsx |
错误对照
1 | // shared/ui/Button.tsx |
三、总结与实践建议
- schema 只暴露安全字段,合理 input/output 拆分。
- resolver 只聚合业务,无数据源直连,无安全泄漏。
- service-api 封装 Apollo client 全局实例,统一管理。
- entities 封装 domain hooks,前端各层只通过 hooks 调用。
- features 聚焦单一业务能力,禁止状态/副作用杂糅。
- widgets 横向组合 features/entities,做场景复合。
- pages 只做页面拼装,不承载业务/副作用/数据。
- shared 只放通用能力,不涉足业务与领域数据。