"멤버"접두사는 일종의 구현 세부 사항입니다. 가능한 리팩토링을 생각할 때 문제 영역에서 기술 솔루션 영역으로의주의를 산만하게합니다. – 나
더 설명해 주시겠습니까? 너의 이유는 내가 접두사를 사용하지 않는 이유에 대해 내가 본 유일한 이유이고 그것을 이해하지 못한다. 내가하지 말아야 할 이유와 동일하지 않습니다.) – Betty Crokker
내 요점은 @CandiedOrange와 @Ewan의 답변을 확장하는 것입니다.
접두사는 리팩토링을 어렵게 만듭니다.
코드가 발전함에 따라 변수와 메소드의 범위가 변경 될 수 있습니다. 예 : 개인 메소드를 작성하고 나중에 다른 (새로운) 클래스에서도 사용 가능해야한다는 것을 알 수 있습니다. 메소드 매개 변수 및 로컬 변수도 비슷할 수 있습니다.
세금 계산기를 생성한다고 가정 해 보겠습니다. 변수 의 임대 가시성 범위 원칙에 따라 세율 과 기본 값 을 모두 매개 변수로 사용하는 방법으로 시작합니다 . (예 :
Java-ish ...)
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
}
다음으로 역 작업을 구현해야하며 TDD에 따라 최소한의 노력으로 작업을 수행하십시오.
class TaxCalculator{
double Calculate(double p_TaxRateInpercent, double p_BaseValue){
return (100+p_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxRateInpercent, double p_TaxedValue){
return p_TaxedValue/((100+p_TaxRateInpercent)/100);
}
}
다음 TDD는 코드를 리팩터링하여 두 메소드의 매개 변수 목록을 줄이는 깔끔한 코드가되도록합니다.
(예, 두 배의 계산을 먼저 추출하지만 요점을 알려 드리겠습니다 ...)
확실한 해결책은 세금을 생성자 매개 변수로 전달하여 세율을 멤버 변수로 변경 하는 것입니다.
class TaxCalculator{
double m_TaxRateInpercent;
TaxCalculator(double p_TaxRateInpercent){
m_TaxRateInpercent = p_TaxRateInpercent;
}
double Calculate(double p_BaseValue){
return (100+m_TaxRateInpercent)/100 * p_BaseValue;
}
double CalculateBase(double p_TaxedValue){
return p_TaxedValue/((100+m_TaxRateInpercent)/100);
}
}
보시다시피 기존 방법의 모든 줄 을 변경해야했습니다 p_TaxRateInpercent
.
문제는 클래스 전체에서 이름을 바꾸는 IDE의 지원 이 없다는 것 입니다. 유일하게 문자열을 포함하는 생성자 또는 부분을 변경하는 검색 / 교체 를 도와줍니다 p_TaxRateInpercent
.
IDE는 정의되지 않은 변수 이름에 대한 리팩토링을 변경할 수 있지만 메소드의 범위로 제한 될 수 있습니다
접두사가 없으면 메소드 서명 만 변경되었을 것입니다. 이름 바꾸기가 전혀 필요하지 않았습니다.
변경시 혼란스러운 SCM 히스토리 접두사
또한 SCM 은 로직이 변경되지 않았더라도 접두사 변경을 로직 변경으로 기록합니다! SCM의 역사는 중요한 기술을 숨기고 다른 사람의 (실제 논리) 변경과 충돌 할 위험을 높이는이 기술 변경으로 인해 복잡해집니다.
this
키워드가 없습니까? 당신은 사용하여 멤버를 참조 할 수 없습니다this
와 같은,this.count
?