代码重构:纯稚的数据类(Data Class)
【摘要】 什么是“纯稚的数据类”?定义: DataClass是指:它们拥有一些字段,以及用于访问(读写)这些字段的函数,除此之外一无长物。这样的类只是一种不会说话的数据容器。影响: DataClass将数据与行为间关系割裂,破坏了面向对象的精髓。特定数据的操作分散在代码各处,可能造成代码霰弹式修改改进目标: 将特定数据的操作集中在一个地方,提高代码的可读性、可维护性、可扩展性等方法: 封装变量、封装...
什么是“纯稚的数据类”?
- 定义: DataClass是指:它们拥有一些字段,以及用于访问(读写)这些字段的函数,除此之外一无长物。这样的类只是一种不会说话的数据容器。
- 影响: DataClass将数据与行为间关系割裂,破坏了面向对象的精髓。特定数据的操作分散在代码各处,可能造成代码霰弹式修改
- 改进目标: 将特定数据的操作集中在一个地方,提高代码的可读性、可维护性、可扩展性等
- 方法: 封装变量、封装集合、搬移函数、抽取方法、移除设值函数
“纯稚的数据类”有哪些表现,如何重构?
案例背景:部门及员工信息管理
public class Staff {
private final String name; // 员工姓名
private final Gender gender; // 员工性别
private final int age; // 员工年龄
private final String departmentName; // 员工所在部门
public Staff(String name, Gender gender, int age, String departmentName) {
this.name = name;
this.gender = gender;
this.age = age;
this.departmentName = departmentName;
}
public String getName() {
return name;
}
public Gender getGender() {
return gender;
}
public int getAge() {
return age;
}
public String getDepartmentName() {
return departmentName;
}
}
重构步骤:
1.修改public属性访问修饰符为private
2.不需要设值的属性删除set方法,提供构造方法
3.集合属性删除设值函数,并提供add/delete方法
4.集合属性的get,返回不可变集合,避免外部修改
DataClass特点:仅有值域及访问值域函数
重构:封装变量、删除设值函数、封装集合
症状/问题
- 在hrbp和audit类中,都存在调用department的staffs,统计部门里男女员工数量的代码片段,属于功能重复
- 人数统计功能,用的都是department内部属性,应该放在department中,功能更内聚
重构:抽取方法
重构:函数搬移
纯数据类必须要重构吗?
- 并非所有纯稚的数据类都需要重构,先分析其被调用点的行为特点
总结
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)