코드 냄새 | 데이터 덩어리

4806 단어 codequalityrefactorit
안녕하세요, 오늘은 코드 스멜 리팩토링 시리즈로 돌아왔습니다. 이 경우에는 Data Clumps라는 코드 스멜에 대해 이야기할 것입니다. 이 코드 스멜은 특정 데이터 그룹이 시스템의 다른 부분에서 사용되고 있음을 관찰할 때 감지될 수 있습니다. 우리의 코드.


원인



단순 프리미티브, 값 유형 또는 복합 유형에 관계없이 데이터 요소 세트는 코드 베이스의 다른 섹션을 통해 지속적으로 함께 전달됩니다.


예시



MarsRover 클래스가 X와 Y 좌표의 값을 매개변수로 받는 것을 볼 수 있는데, 처음에는 이것이 반드시 나쁜 것은 아닙니다.

class MarsRover {
  constructor(private x: number, private y: number, private direction: string){
    //...
  }

  move() {
    //...
  }

  //...
}


// Use of the class
new MarsRover(100, 200, 'Example direction');



해결책



별도의 집합으로 X와 Y를 사용하는 것이 해로울 필요는 없지만 응집력 부족, 해당 데이터를 검증할 때의 복잡성, 무엇보다도 코드의 다른 부분에서 관련 논리의 중복과 같은 다양한 문제를 일으킬 수 있습니다. , 이 작은 냄새를 어떻게 고칠 수 있는지 봅시다:

class Coordinates {
  constructor(private x: number, private y: number) {
    //...
  }

  getX() {
    return this.x;
  }

  getY() {
    return this.y;
  }
}



class MarsRover {
  constructor(private coordinates: Coordinates, private direction: string){
    //...
  }

  move() {
    //...
  }
}

// Use of the class
new MarsRover(
  new Coordinates(100, 200), 
  'Example direction'
);


언뜻 보기에 이 간단한 예에서는 이 변경으로 많은 것을 얻지 못하는 것처럼 보이지만 데이터 세트에 고유한 엔터티를 제공하여 코드에 의미 체계와 장기적인 유지 관리 가능성을 제공합니다.

이익


  • 가독성 향상: 많은 매개 변수 목록을 축소하고 메서드 호출을 단순화할 수 있으며 의미 체계를 제공할 수 있습니다.
  • 유지 보수성 향상: 산탄총 수술의 코드 냄새에 빠지는 것을 방지하고 이러한 방식으로 가능한 변경 관리를 용이하게 합니다.

  • 새로운 논리 또는 좌표 유효성 검사와 관련하여 변경 사항을 요청하는 경우 좌표 처리가 필요한 코드의 다른 부분에서 재사용할 수 있을 뿐만 아니라 Coordinates 클래스 내에서 추가할 위치에 대해 매우 명확하게 알 수 있습니다.


    읽어주셔서 감사합니다 😊

    좋은 웹페이지 즐겨찾기