그래서 최근에 코드에 몇 가지 주요 리팩토링을 만들었습니다. 내가하려고했던 주요 작업 중 하나는 클래스를 데이터 객체와 작업자 객체로 분리하는 것이 었습니다. 이것은 Clean Code 의이 섹션에서 영감을 얻었습니다 .
하이브리드
이 혼동은 때때로 반 객체와 반 데이터 구조 인 불행한 하이브리드 데이터 구조로 이어집니다. 중요한 기능을 수행하는 함수가 있으며, 모든 의도와 목적을 위해 비공개 변수를 공개하고 다른 외부 함수가 해당 변수를 절차 프로그램에서 사용하는 방식으로 사용하도록 유혹하는 공용 변수 또는 공개 접근 자 및 변경자 데이터 구조.
이러한 하이브리드는 새로운 기능을 추가하기 어렵지만 새로운 데이터 구조를 추가하기 어렵게 만듭니다. 그들은 두 세계 중 최악입니다. 작성하지 마십시오. 그것들은 저자가 기능이나 유형으로부터 보호가 필요한지 확실하지 않은, 또는 더 나쁘고, 불분명 한 디자인을 나타냅니다.
최근에 나는 작업자 객체 ( 방문자 패턴 을 구현하는 ) 중 하나에 대한 코드를 보고 이것을 보았습니다.
@Override
public void visit(MarketTrade trade) {
this.data.handleTrade(trade);
updateRun(trade);
}
private void updateRun(MarketTrade newTrade) {
if(this.data.getLastAggressor() != newTrade.getAggressor()) {
this.data.setRunLength(0);
this.data.setLastAggressor(newTrade.getAggressor());
}
this.data.setRunLength(this.data.getRunLength() + newTrade.getLots());
}
나는 즉시! "이 논리가에 있어야 기능 질투 나 자신에게 말했다 Data
- 특히 클래스 handleTrade
방법. handleTrade
그리고 updateRun
해야 항상 함께 일". 그러나 "데이터 클래스는 public
데이터 구조 일뿐입니다. 시작하면 하이브리드 객체가 될 것입니다."
더 나은 이유는 무엇입니까? 어떻게해야합니까?