后端工程师
本skill指导如何理解产品需求,实现后端服务功能,构建业务领域和数据处理逻辑。
何时使用本Skill
当后端工程师需要实现后端功能时使用,例如:
-
"我是后端工程师,需要实现后端功能..."
-
"我需要设计数据库和API..."
-
"请帮我实现这个后端服务..."
核心职责
- 需求理解
-
理解产品需求和功能规格
-
理解业务领域
-
理解业务流程
- 业务实体识别
-
识别业务实体
-
分析实体关系
-
建立数据模型
- 领域构建
-
构建业务领域模型
-
设计领域服务
-
设计领域事件
- 后端服务实现
-
实现API接口
-
实现业务逻辑
-
实现数据处理
- 数据持久化
-
设计数据库表结构
-
实现数据访问层
-
实现数据缓存
关键技能
后端技术
-
后端编程语言(Java/Python/Go/Node.js)
-
框架(Spring Boot/Django/Express)
-
数据库(MySQL/PostgreSQL/MongoDB)
业务建模能力
-
业务实体识别
-
业务领域建模
-
数据建模
架构能力
-
分层架构
-
领域驱动设计(DDD)
-
六边形架构
优化能力
-
性能优化
-
数据库优化
-
缓存优化
输入物
-
产品功能清单
-
功能规格说明
-
数据模型图
-
API文档
交付物
-
后端服务代码
-
API文档
-
数据库设计文档
-
后端文档
质量标准
-
✅ 功能实现完整
-
✅ 代码质量高
-
✅ 性能良好
-
✅ 符合架构要求
工作流程
-
需求接收:接收产品功能清单、功能规格说明、数据模型图
-
需求理解:深入理解产品需求和业务流程
-
业务分析:识别业务实体,建立数据模型
-
领域构建:构建业务领域模型
-
接口设计:设计API接口
-
服务实现:实现后端服务
-
数据持久化:设计数据库,实现数据访问层
-
性能优化:优化性能
-
测试验证:进行单元测试和集成测试
-
代码提交:提交代码,进行代码评审
工作流程图
graph LR A[功能规格] -->|需求理解| B[业务分析] B -->|实体识别| C[业务模型] C -->|DDD建模| D[领域驱动设计] D -->|API设计| E[API规格说明] E -->|服务实现| F[业务逻辑实现] F -->|数据库设计| G[表结构设计] G -->|数据访问层| H[ORM实现] H -->|缓存优化| I[缓存层] I -->|性能优化| J[查询优化] J -->|单元测试| K[测试覆盖] K -->|集成测试| L{通过?} L -->|是| M[代码评审] L -->|否| N[修复问题] N -->|调整| F M -->|合并| O[提交到测试]
协作关系
-
向上对接:产品专家、技术架构师
-
平行对接:前端工程师、测试人员
后端开发方法论
方法1: 领域驱动设计(DDD)
-
识别领域和子域
-
建立领域模型
-
设计聚合和实体
-
设计领域服务和事件
核心概念:
-
聚合:一致性边界,保证数据一致性
-
实体:有唯一标识的对象
-
值对象:无唯一标识的对象
-
领域服务:不属于特定实体或值对象的业务逻辑
-
领域事件:表示领域内发生的重要事件
方法2: 六边形架构
-
分离领域层和应用层
-
使用端口和适配器
-
解耦业务逻辑和外部依赖
层次结构:
-
领域层:业务逻辑、实体、值对象、领域服务
-
应用层:应用服务、用例、领域事件
-
适配器层:接口适配、持久化适配、消息适配
-
基础设施层:外部依赖、框架、工具
依赖方向:外部依赖 → 适配器层 → 应用层 → 领域层
方法3: RESTful API设计
-
使用RESTful风格
-
设计合理的资源路径
-
设计标准的HTTP方法
-
设计清晰的错误处理
HTTP方法:
-
GET:获取资源
-
POST:创建资源
-
PUT:更新整个资源
-
PATCH:部分更新资源
-
DELETE:删除资源
数据库设计
数据库选择
-
关系型数据库(MySQL/PostgreSQL):适合结构化数据、事务要求高的场景
-
文档型数据库(MongoDB):适合非结构化数据、灵活schema的场景
-
缓存数据库(Redis):适合缓存、会话存储的场景
表设计原则
-
规范化:遵循第三范式,避免数据冗余
-
索引:为查询字段创建索引
-
分表分库:大数据量时考虑分表分库
-
软删除:使用标记字段表示删除
常见误区
❌ 误区1: 只关注技术实现,不关注业务逻辑 ✅ 正确: 技术和业务并重,优先考虑业务逻辑
❌ 误区2: 不考虑性能,只关注功能实现 ✅ 正确: 在实现功能的同时考虑性能优化
❌ 误区3: 不考虑扩展性,只关注当前需求 ✅ 正确: 在设计时考虑系统的扩展性
成功案例
案例1: 报表导出功能后端实现
功能需求: 导出销售数据为Excel
实现步骤:
业务实体识别:
-
销售记录(SalesRecord)
-
产品(Product)
-
客户(Customer)
-
销售员(Salesperson)
领域构建:
-
SalesRecord聚合(包含销售明细)
-
ReportService(导出报表服务)
-
ExportJob(导出任务)
API设计:
-
POST /api/reports/export - 创建导出任务
-
GET /api/reports/export/{jobId} - 查询导出任务状态
-
GET /api/reports/export/{jobId}/download - 下载导出文件
服务实现:
-
ReportService.exportSalesData() - 导出销售数据
-
导出参数验证(日期范围、产品分类、地区)
-
数据查询和过滤
-
数据转换为Excel
-
保存到文件服务器
异步处理:
-
使用消息队列处理导出任务
-
实现导出进度跟踪
-
实现导出完成通知
技术实现:
-
使用Java + Spring Boot
-
使用JPA进行数据访问
-
使用Apache POI生成Excel
-
使用RabbitMQ处理异步任务
-
使用Redis缓存查询结果
案例2: 搜索功能后端实现
功能需求: 产品搜索功能
实现步骤:
业务实体识别:
-
产品(Product)
-
产品分类(ProductCategory)
-
品牌(Brand)
领域构建:
-
Product聚合
-
SearchService(搜索服务)
-
SuggestionService(搜索建议服务)
API设计:
-
GET /api/search?q=keyword - 搜索产品
-
GET /api/search/suggestions?q=keyword - 搜索建议
-
GET /api/search/popular - 热门搜索
服务实现:
-
SearchService.search() - 搜索产品
-
支持精准搜索和模糊搜索
-
支持多字段搜索(名称、SKU、规格)
-
支持排序和分页
性能优化:
-
使用Elasticsearch搜索引擎
-
实现搜索结果缓存
-
实现热门搜索缓存
技术实现:
-
使用Python + Django
-
使用Django ORM进行数据访问
-
使用Elasticsearch进行搜索
-
使用Redis缓存查询结果
-
使用Celery处理异步任务
使用指南
当用户说"我是后端工程师,需要实现后端功能..."时,按照以下步骤引导:
-
需求接收:接收产品功能清单、功能规格说明、数据模型图
-
需求理解:深入理解产品需求和业务流程
-
业务分析:识别业务实体,建立数据模型
-
领域构建:使用DDD方法构建业务领域模型
-
接口设计:设计RESTful API接口
-
服务实现:实现后端服务和业务逻辑
-
数据持久化:设计数据库,实现数据访问层
-
性能优化:优化数据库查询、实现缓存
-
测试验证:进行单元测试和集成测试
-
代码提交:提交代码,进行代码评审
输出质量检查清单
在提交后端代码之前,检查以下项目:
-
功能实现完整
-
代码质量高(遵循代码规范)
-
业务逻辑正确
-
数据库设计合理
-
API设计规范
-
性能良好(查询优化、缓存)
-
错误处理完善
-
安全性考虑(SQL注入、XSS等)
-
单元测试覆盖率高