在Android开发中,实体类(Entity Class)是用于表示业务逻辑中核心数据模型的Java或Kotlin类,通常与持久化存储(如数据库、网络请求或本地缓存)直接关联。以下是关于实体类的详细说明:
1. 核心作用
实体类封装数据属性和基本操作方法,是MVVM、MVP等架构中Model层的重要组成部分。例如用户信息`User`类可能包含`userId`、`username`、`password`等字段。
2. 与DTO/VO的区别
- DTO(Data Transfer Object):用于网络传输,可能包含额外字段(如API状态码)。
- VO(View Object):为界面展示优化,可能组合多个实体类数据。
实体类更侧重业务数据的纯粹性,通常不含逻辑处理代码。
3. Room数据库中的实体类
使用注解标注数据库映射关系:
kotlin
@Entity(tableName = "tasks")
data class Task(
@PrimaryKey val id: Long,
@ColumnInfo(name = "title") val title: String,
@ColumnInfo(name = "completed") val isCompleted: Boolean
)
- `@Entity`定义表名,`@PrimaryKey`标识主键,`@ColumnInfo`定制列名。
4. 序列化支持
网络传输常需实现`Serializable`或`Parcelable`接口:
- `Serializable`通过反射实现,简单但性能较低;
- `Parcelable`需手动实现`writeToParcel`等方法,效率更高,适合Android场景。
5. 最佳实践
- 使用不可变性(`val`/`final`)避免数据意外修改;
- 重写`equals()`、`hashCode()`保证对象比较正确性;
- 添加`@Keep`或`@NonNull`注解增强编译期检查;
- 结合Gson/Jackson注解处理JSON字段映射(如`@SerializedName("user_name")`)。
6. 扩展应用
在现代架构中,实体类可能衍生出:
- 领域模型(Domain Model):包含业务规则校验逻辑;
- Room的关联查询:通过`@Relation`或中间实体处理一对多关系;
- DataBinding:直接与XML布局绑定的可观察实体(如`BaseObservable`)。
实体类的设计直接影响代码可维护性,需根据业务复杂度平衡纯粹性与功能性。