# java110-bean 模块说明文档

## 模块概述

`java110-bean` 是 MicroCommunity 项目的数据实体模块，负责管理系统中所有的数据实体对象。该模块采用分层架构设计，将数据对象按照不同的使用场景和职责进行划分，确保数据在不同层次间的安全性和一致性。

## 项目信息

- **项目类型**: Maven 项目
- **ArtifactId**: `java110-bean`
- **父项目**: `MicroCommunity` (com.java110:1.0-SNAPSHOT)
- **打包方式**: jar
- **主要依赖**: 
  - `fastjson` - 阿里巴巴的JSON处理库

## 包结构说明

### 1. DTO (Data Transfer Object) 包
- **位置**: `com.java110.dto`
- **子包数量**: 100个
- **主要用途**: 数据传输对象，主要用于查询操作
- **特点**:
  - 字段不需要与数据库字段一一对应
  - 支持复杂查询结果的封装
  - 继承自基础类 `Dto`（实现 `Serializable` 接口）

**主要子包示例**:
- `accessControl` - 门禁控制相关DTO
- `account` - 账户管理相关DTO  
- `activities` - 活动管理相关DTO
- `advert` - 广告管理相关DTO
- `fee` - 费用管理相关DTO
- `user` - 用户管理相关DTO
- ...等100个业务领域子包

### 2. PO (Persistent Object) 包
- **位置**: `com.java110.po`
- **子包数量**: 86个
- **主要用途**: 持久化对象，主要用于数据库增删改操作
- **特点**:
  - 字段与数据库表字段一一对应
  - 直接映射数据库表结构
  - 用于ORM框架操作

**主要子包示例**:
- `accessControl` - 门禁控制相关PO
- `account` - 账户管理相关PO
- `activities` - 活动管理相关PO
- `fee` - 费用管理相关PO
- `user` - 用户管理相关PO
- ...等86个业务领域子包

### 3. VO (View Object) 包
- **位置**: `com.java110.vo`
- **子包数量**: 1个（api子包） + 7个核心类
- **主要用途**: 视图对象，主要用于前端数据返回
- **特点**:
  - 控制数据安全性，选择性返回前端所需字段
  - 防止敏感信息泄露（如用户密码）
  - 统一的接口输出协议

**核心类**:
- `ResultVo` - 统一的接口返回结果封装类
- `Vo` - VO基础类
- `FeeDetailResultVo` - 费用明细返回VO
- `FloorVo` - 楼层信息VO
- `MachineTaskVo` - 设备任务VO
- `MorePageVo` - 分页VO
- `api`子包 - API接口专用VO

## 包关系与数据流转

### 数据流转流程
1. **数据库操作层** ↔ **PO对象**：直接与数据库交互
2. **业务逻辑层** ↔ **DTO对象**：处理复杂查询和业务逻辑
3. **接口层** ↔ **VO对象**：返回给前端的安全数据

### 职责分离
- **PO**: 专注于数据持久化，与数据库表结构强关联
- **DTO**: 专注于业务数据传输，支持复杂查询结果封装
- **VO**: 专注于前端展示，确保数据安全性

## 核心类说明

### ResultVo 类
作为统一的接口返回封装类，提供：
- 标准化的响应码和消息定义
- 分页数据支持
- 数据对象封装
- 便捷的静态方法创建响应实体

**常用静态方法**:
```java
ResultVo.success(); // 成功响应
ResultVo.error("错误信息"); // 错误响应
ResultVo.createResponseEntity(data); // 创建响应实体
```

### Dto 基础类
所有DTO对象的基类，实现 `Serializable` 接口，支持序列化。

## 使用示例

### 查询场景
```java
// 使用DTO进行复杂查询
UserDto userDto = userService.queryUser(userQueryDto);

// 转换为VO返回前端
UserVo userVo = convertToVo(userDto);
return ResultVo.createResponseEntity(userVo);
```

### 数据操作场景
```java
// 使用PO进行数据库操作
UserPo userPo = new UserPo();
userPo.setUserName("test");
userMapper.insert(userPo);
```

## 注意事项

1. **数据安全**: VO对象必须过滤敏感信息，确保不返回密码等敏感字段
2. **职责明确**: 各包对象应严格遵循其设计用途，避免混用
3. **包依赖**: 建议遵循 PO → DTO → VO 的单向依赖关系
4. **序列化**: 所有DTO对象都支持序列化，便于网络传输

## 版本信息

- **创建时间**: 2020-12-13
- **维护者**: java110 team
- **许可证**: Apache License 2.0

---

