리팩토링 001 - 세터 제거
10160 단어 refactoringoopprogrammingcleancode
TL;DR: Make your attributes private to favor mutability
해결된 문제
관련 코드 냄새
코드 냄새 28 - 세터
Maxi Contieri ・ 2020년 11월 19일 ・ 2분 읽기
#oop
#codenewbie
#programming
#webdev
코드 냄새 01 - 빈혈 모델
Maxi Contieri ・ 2020년 10월 20일 ・ 2분 읽기
#codenewbie
#oop
#beginners
#computerscience
단계
코드 냄새 28 - 세터
Maxi Contieri ・ 2020년 11월 19일 ・ 2분 읽기
#oop
#codenewbie
#programming
#webdev
코드 냄새 01 - 빈혈 모델
Maxi Contieri ・ 2020년 10월 20일 ・ 2분 읽기
#codenewbie
#oop
#beginners
#computerscience
샘플 코드
전에
public class Point {
protected int x;
protected int y;
public Point() {
this.x = 0;
this.y = 0;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
}
Point location = new Point();
//At this momment, it is not clear which points represent
//It is coupled to constructor decision.
//Might be null or some other convention
location.setX(1);
//Now we have point(1,0)
location.setY(2);
//Now we have point(1,2)
public class Car {
protected int speed;
public Car() {
}
public void setSpeed(Speed desiredSpeed) {
this.speed = desiredSpeed;
}
}
Car tesla = new Car();
//We have no speed??
tesla.setSpeed(100 km/h);
//Now our car runs fast
후에
//1. We locate setters usage
location.setX(1);
location.setY(2);
//2. If you are setting essential properties move
//them to the constructor and remove the method
public class Point {
public Point(int x, int y) {
this.x = x;
this.y = y;
//We remove the setters
}
Point location = new Point(1, 2);
public class Car {
protected int speed;
public Car() {
this.speed = 0 km/h;
}
public void speed(Speed desiredSpeed) {
this.speed = desiredSpeed;
}
}
//1. Locate the setters usage
//3. If you need to change an accidental property
// it is not a setter. Remove the setXXX prefix
Car tesla = new Car();
//Our car is stopped
tesla.speed(100 km/h);
//We tell the desired speed. We don't set anything
//We don't care if the car stores its new speed.
//if it manages through the engine
//if the road is moving etc
유형
[X] 반자동
우리는 IDE로 세터(메타 프로그래밍을 사용하지 않는 한)를 감지해야 합니다.
커버리지가 좋은 경우 테스트를 제거하고 어떤 테스트가 실패하는지 확인할 수도 있습니다.
태그
public class Point {
protected int x;
protected int y;
public Point() {
this.x = 0;
this.y = 0;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
}
Point location = new Point();
//At this momment, it is not clear which points represent
//It is coupled to constructor decision.
//Might be null or some other convention
location.setX(1);
//Now we have point(1,0)
location.setY(2);
//Now we have point(1,2)
public class Car {
protected int speed;
public Car() {
}
public void setSpeed(Speed desiredSpeed) {
this.speed = desiredSpeed;
}
}
Car tesla = new Car();
//We have no speed??
tesla.setSpeed(100 km/h);
//Now our car runs fast
//1. We locate setters usage
location.setX(1);
location.setY(2);
//2. If you are setting essential properties move
//them to the constructor and remove the method
public class Point {
public Point(int x, int y) {
this.x = x;
this.y = y;
//We remove the setters
}
Point location = new Point(1, 2);
public class Car {
protected int speed;
public Car() {
this.speed = 0 km/h;
}
public void speed(Speed desiredSpeed) {
this.speed = desiredSpeed;
}
}
//1. Locate the setters usage
//3. If you need to change an accidental property
// it is not a setter. Remove the setXXX prefix
Car tesla = new Car();
//Our car is stopped
tesla.speed(100 km/h);
//We tell the desired speed. We don't set anything
//We don't care if the car stores its new speed.
//if it manages through the engine
//if the road is moving etc
[X] 반자동
우리는 IDE로 세터(메타 프로그래밍을 사용하지 않는 한)를 감지해야 합니다.
커버리지가 좋은 경우 테스트를 제거하고 어떤 테스트가 실패하는지 확인할 수도 있습니다.
태그
관련 리팩토링
크레딧
Comfreak에서 Pixabay의 이미지
이 문서는 리팩토링 시리즈의 일부입니다.
Reference
이 문제에 관하여(리팩토링 001 - 세터 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/refactoring-001-remove-setters-26cg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(리팩토링 001 - 세터 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsee/refactoring-001-remove-setters-26cg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)