作为一名有十年开发经验的Java全栈工程师,我最近完成了一个基于Spring Boot的宠物成长记录平台的设计与实现。这个项目源于我观察到现代宠物主对科学养宠的需求日益增长,但市面上缺乏系统化的宠物健康管理工具。通过这个平台,宠物主可以记录宠物的日常饮食、健康数据、疫苗接种等信息,形成完整的宠物成长档案。
这个项目采用了当前主流的Spring Boot+Vue前后端分离架构,后端使用MyBatis Plus作为ORM框架,数据库选用MySQL。系统实现了用户管理、宠物档案管理、健康记录、提醒服务等核心功能模块。整个开发周期约两个月,期间我遇到了不少技术挑战,也积累了一些值得分享的经验。
系统采用标准的B/S架构,前后端完全分离。这种架构选择主要基于以下几点考虑:
前后端分离的优势:前端专注于页面展示和用户交互,后端专注于业务逻辑和数据处理,开发人员可以并行工作,提高开发效率。
技术栈选择:
部署架构:
后端采用经典的三层架构设计:
Controller层:处理HTTP请求,参数校验,返回统一格式的JSON响应。我特别设计了全局异常处理机制,确保所有异常都能被捕获并返回友好的错误信息。
Service层:实现核心业务逻辑。这里我使用了策略模式来处理不同类型的宠物健康指标计算,方便后续扩展。
DAO层:基于MyBatis Plus实现,大大简化了CRUD操作。我自定义了通用Mapper和Service,减少了重复代码。
java复制// 示例:宠物健康记录服务接口
public interface PetHealthService {
/**
* 记录宠物健康数据
* @param petId 宠物ID
* @param healthData 健康数据DTO
* @return 记录结果
*/
Result recordHealthData(Long petId, HealthDataDTO healthData);
/**
* 获取宠物健康趋势
* @param petId 宠物ID
* @param days 最近天数
* @return 健康趋势数据
*/
HealthTrendVO getHealthTrend(Long petId, int days);
}
前端采用Vue3组合式API开发,主要特点:
组件化开发:将UI拆分为可复用的组件,如宠物卡片、健康图表等。
状态管理:使用Pinia管理全局状态,如用户登录信息、宠物列表等。
路由设计:基于Vue Router实现动态路由,根据用户权限加载不同菜单。
UI库选择:Element Plus提供了丰富的组件,加速了开发进程。
用户系统采用了RBAC权限模型,主要包含以下功能:
注册登录:
权限控制:
java复制// 权限校验示例
@PreAuthorize("hasRole('PET_OWNER')")
@PostMapping("/pets/{petId}/records")
public Result addHealthRecord(@PathVariable Long petId, @Valid @RequestBody HealthRecordDTO dto) {
// 业务逻辑
}
这是系统的核心模块,实现了:
宠物基本信息管理:
数据结构设计:
sql复制CREATE TABLE `pet_info` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL COMMENT '主人ID',
`name` varchar(50) NOT NULL COMMENT '宠物名称',
`type` tinyint NOT NULL COMMENT '宠物类型(1-猫,2-狗,3-其他)',
`breed` varchar(50) DEFAULT NULL COMMENT '品种',
`birthday` date DEFAULT NULL COMMENT '生日',
`gender` tinyint DEFAULT NULL COMMENT '性别(1-公,2-母)',
`weight` decimal(5,2) DEFAULT NULL COMMENT '体重(kg)',
`avatar` varchar(255) DEFAULT NULL COMMENT '头像URL',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='宠物基本信息表';
这个模块实现了宠物健康数据的记录和分析:
健康指标记录:
健康提醒:
健康报告:
考虑到宠物照片等文件存储需求,系统实现了:
阿里云OSS集成:
防重复上传:
java复制public class FileUploadService {
private final OSS ossClient;
private final String bucketName;
public String uploadFile(MultipartFile file, String filePath) {
// 生成唯一文件名
String fileName = generateFileName(file.getOriginalFilename());
// 上传到OSS
ossClient.putObject(bucketName, filePath + fileName,
file.getInputStream());
// 返回访问URL
return generateFileUrl(filePath + fileName);
}
// 其他工具方法...
}
健康数据分析是系统的亮点功能:
体重趋势分析:
饮食分析:
运动量分析:
为了及时通知用户重要事项,实现了:
多种通知方式:
消息模板:
消息去重:
JWT实现:
安全防护:
敏感数据加密:
数据备份:
索引优化:
SQL优化:
Redis应用:
缓存一致性:
代码分割:
资源优化:
单元测试:
集成测试:
压力测试:
容器化部署:
CI/CD流程:
监控系统:
通过这个项目,我实现了:
这个项目从需求分析到最终上线,历时两个多月,期间遇到了不少挑战,但也收获颇丰。特别是健康数据分析模块,从最初的简单记录发展到现在的智能预警,迭代了多个版本。希望我的经验能对正在开发类似系统的同学有所帮助。