1. 项目实训背景与个人开发日志的价值
山东大学软件学院的实训项目一直是连接理论知识与工程实践的重要桥梁。作为计算机相关专业的学生,在实训过程中记录个人开发日志(Development Log)不仅是课程要求,更是一种值得培养的职业习惯。我在参与"智能仓储管理系统"开发实训时,坚持每天撰写开发日志,第二周的技术沉淀形成了这篇日志(二)。
开发日志不同于普通的实验报告,它更像技术人员的"工作日记",记录着:
- 每日完成的具体功能模块
- 遇到的技术问题及解决方案
- 未解决的疑难杂症
- 明日开发计划
- 个人技术反思
这种记录方式特别适合敏捷开发过程,当项目周期达到4-8周时,定期回顾开发日志能显著提高开发效率。我的导师曾强调:"好的开发日志应该让三个月后的自己还能快速理解当时的思路"。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 第二周核心开发内容复盘
2.1 数据库设计与优化
本周重点完成了MySQL数据库的详细设计。原计划使用简单的三张表(用户、商品、库存),但在需求分析会后调整为更符合实际业务的六表结构:
sql复制CREATE TABLE `warehouse` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`location` varchar(100) NOT NULL,
`capacity` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
遇到的典型问题包括:
- 库存流水记录是否应该独立建表?
- 解决方案:将stock_record从goods表分离,避免频繁update影响性能
- 如何设计商品分类的多级关联?
- 采用parent_id自关联方式,配合递归查询
重要经验:数据库设计阶段多花1小时,后期能节省10小时的调试时间。建议使用PowerDesigner等工具先做概念模型验证。
2.2 Spring Boot后端开发进展
基于上周搭建的基础框架,本周实现了以下核心功能:
-
用户权限模块
- 采用RBAC模型
- 使用Spring Security + JWT实现
- 特别注意了密码加密存储(BCryptPasswordEncoder)
-
库存管理API
- 出入库记录生成
- 库存实时查询接口
- 特别处理了并发修改问题(@Transactional + 乐观锁)
java复制@RestController
@RequestMapping("/api/inventory")
public class InventoryController {
@Autowired
private InventoryService inventoryService;
@PostMapping("/adjust")
public ResponseEntity<?> adjustInventory(@RequestBody InventoryAdjustDTO dto) {
try {
return ResponseEntity.ok(inventoryService.adjustStock(dto));
} catch (OptimisticLockingFailureException e) {
return ResponseEntity.status(409).body("数据已被其他用户修改");
}
}
}
2.3 前端Vue组件开发
使用Vue3+Element Plus构建管理界面时,遇到几个关键问题:
-
表格分页与后端API的对接
- 采用axios拦截器统一处理分页参数转换
- 实现了防抖搜索功能
-
表单验证的集中管理
- 将验证规则提取到单独的validation.js
- 使用async-validator库
javascript复制// 库存调整表单验证规则
export const inventoryRules = {
quantity: [
{ required: true, message: '请输入数量' },
{
validator: (rule, value) => value > 0,
message: '数量必须大于0'
}
],
operationType: [{ required: true }]
}
3. 典型问题排查记录
3.1 MyBatis异常:Invalid bound statement
周三下午突然出现的诡异问题,现象是:
- 本地运行正常
- 打包部署后报"Invalid bound statement (not found)"
- 清理target重新编译无效
最终发现是maven资源过滤配置缺失:
xml复制<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
3.2 Vue路由懒加载导致的Chunk加载失败
采用路由懒加载后,生产环境偶尔出现:
code复制Failed to fetch dynamically imported module
解决方案:
- 配置webpack的output.chunkFilename
- 添加错误边界处理
- 使用prefetch策略
javascript复制const routes = [
{
path: '/inventory',
component: () => import(/* webpackPrefetch: true */ '@/views/Inventory.vue')
}
]
4. 开发效率提升技巧
4.1 代码生成器的应用
发现手写CRUD代码太耗时后,尝试了以下工具:
- MyBatis Generator:生成基础Mapper
- 阿里云API调试工具:自动生成接口代码
- 自制模板生成器(基于Freemarker)
注意:生成的代码需要二次审查,特别是关联查询部分
4.2 调试技巧总结
-
后端调试:
- 使用Postman的Tests脚本自动化验证
- 集成Swagger UI可视化API文档
- 日志分级配置(logback-spring.xml)
-
前端调试:
- Vue Devtools组件状态检查
- 使用axios拦截器打印完整请求
- 配置sourcemap方便调试生产代码
4.3 团队协作优化
- Git规范:
- 采用Git Flow分支模型
- commit message格式:
code复制[模块名] 动作描述 - 详细说明1 - 详细说明2
- 每日站会:
- 昨天做了什么
- 今天计划做什么
- 遇到什么阻碍
5. 下周开发计划与风险预估
根据当前进度,制定下周重点任务:
| 模块 | 任务 | 预估工时 | 风险点 |
|---|---|---|---|
| 报表统计 | 库存周转率计算 | 8h | 算法准确性验证 |
| 消息通知 | 库存预警邮件 | 6h | 邮件服务器配置 |
| 移动端适配 | 响应式布局调整 | 4h | Element Plus兼容性 |
需要特别注意的技术风险:
- Excel导出功能可能遇到大数据量内存溢出
- 预案:采用分页查询+分批写入
- 定时任务可能错过执行
- 预案:增加任务执行日志表
个人需要提前准备的知识:
- 复习Spring Task定时任务配置
- 学习ECharts的基本使用方法
- 研究WebSocket的断线重连机制
在实训过程中保持开发日志的习惯,不仅帮助我系统化地整理技术要点,更培养了对项目进度的掌控能力。特别是在解决MyBatis映射问题时,通过回溯日志快速定位到maven配置的疏漏,这种"技术侦探"般的体验让我深刻体会到文档记录的重要性。建议每位同学都能认真对待开发日志,它既是成长轨迹的记录,也是解决问题时的宝贵线索库。
