코드 냄새 | 데이터 덩어리
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 클래스 내에서 추가할 위치에 대해 매우 명확하게 알 수 있습니다.
읽어주셔서 감사합니다 😊
Reference
이 문제에 관하여(코드 냄새 | 데이터 덩어리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/producthackers/code-smell-data-clumps-32an텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)