코드 냄새 55 - 개체 난교

개체를 데이터 홀더로 보는 경우 해당 캡슐화를 위반하게 되지만 실생활에서와 같이 항상 동의를 구해야 합니다.

TL;DR: Don't mess with other object's data.



문제


  • 정보 은폐 위반
  • 캡슐화 위반
  • 커플링

  • 솔루션


  • 데이터가 아닌 인터페이스 및 동작과 연결됩니다.

  • 샘플 코드



    잘못된




    <?
    
    final class Point {
        public $x;
        public $y;
    }
    
    final class DistanceCalculator {
        function distanceBetween(Point $origin, Point $destination) {
            return sqrt((($destination->x - $origin->x) ^ 2) + (($destination->y - $origin->y) ^ 2));
        }
    }
    

    오른쪽



    <?
    
    final class Point {
        private $rho;
        private $theta;
    
        public function x() {
            return $this->rho * cos($this->theta);
        }
    
        public function y() {
            return $this->rho * sin($this->theta);
        }
    }
    
    final class DistanceCalculator {
        function distanceBetween(Point $origin, Point $destination) {
    
            return sqrt((($destination->x() - $origin->x() ^ 2) + (($destination->y() - $origin->y()) ^ 2)));
        }
    
    }
    

    발각



    공개 속성, 세터 및 게터 사용에 대해 경고하고 권장하지 않도록 린터를 설정할 수 있습니다.

    태그


  • 커플링

  • 결론



    클래스가 세터, 게터 및 공용 메서드로 오염된 경우 우발적 구현에 결합할 수 있는 방법이 확실히 있습니다.

    또한 ~으로 알려진


  • 부적절한 친밀감

  • 처지











    더 많은 정보


  • Wikipedia
  • Refactoring.Guru
  • C2 Wiki

  • 학점



    사진 제공: Nicolas Poussin


    A data structure is just a stupid programming language.



    빌 고스퍼








    이 기사는 CodeSmell 시리즈의 일부입니다.




    최종 업데이트: 2021/06/14

    좋은 웹페이지 즐겨찾기