漫天飞的setter

漫天飞的setter

  • 重构手法
    • 方法封装在对应的模型中
    • 使用构造函数,移除设值函数。
    • 编写不变类

案例1

1
2
3
4
5
public void approve(final long bookId) {
...
book.setReviewStatus(ReviewStatus.APPROVED);
...
}
  • 问题:使用到了setter, setter往往是缺乏封装的一种做法。你不知道数据会在何时被哪里修改,造成结果是别人的改动可能会使你的代码崩溃,同时会有并发问题
  • 修正:使用函数封装了setter方法
1
2
3
4
5
6
7
8
9
10
11
public void approve(final long bookId) {
...
book.approve();
...
}

class Book {
public void approve() {
this.reviewStatus = ReviewStatus.APPROVED;
}
}

进一步重构

重构手法:编写不变类

改造之前的方法

1
2
3
4
5
class Book {
public Book approve() {
return new Book(..., ReviewStatus.APPROVED, ...);
}
}

案例2

1
2
3
4
Book book = new Book();
book.setBookId(bookId);
book.setTitle(title);
book.setIntroduction(introduction);
  • 问题:这种初始化的代码,压根没必要以setter的方式存在

  • 修正:

    1
    Book book = new Book(bookId, title, introduction);

漫天飞的setter
http://example.com/漫天飞的setter/
作者
Panyurou
发布于
2022年4月1日
许可协议