Code Smell 08 - 협업의 긴 사슬

긴 체인을 만들면 결합 및 파급 효과가 발생합니다.
모든 체인 변경은 코드를 깨뜨립니다.

TL;DR: Just sent messages to your acquaintances.


문제


  • 커플링
  • 캡슐화 중단

  • 솔루션


  • 중간 방법을 만듭니다.
  • 생각해보세요 Law of Demeter .
  • 더 높은 수준의 메시지를 생성합니다.

  • 샘플 코드


    잘못된



    class Dog {
       constructor(feet) {
         this.feet = feet;    
      }
      getFeet() {    
        return this.feet;
      }  
    }
    
    class Foot {
      move(){    
        //..
      }
    }
    
    feet = [new Foot(), new Foot(), new Foot(), new Foot()];
    dog = new Dog(feet);
    
    for (var foot of dog.getFeet()) {
      foot.move(); 
    }
    

    오른쪽



    class Dog {
       constructor(feet) {
         this.feet = feet;    
      }
      walk(){
        for (var foot of this.feet) {
          foot.move(); 
        }
      }
    }
    
    class Foot {
      move(){    
        //..
      }
    }
    
    feet = [new Foot(), new Foot(), new Foot(), new Foot()];
    dog = new Dog(feet);
    dog.walk();
    

    발각



    구문 분석 트리를 사용하여 자동 감지가 가능합니다.

    또한 ~으로 알려진


  • 메시지 체인
  • 데메테르의 법칙

  • 처지






    더 많은 정보


  • Refactoring Guru

  • 태그


  • 선언적
  • 캡슐화

  • 결론



    연속 메시지 호출을 피하십시오. 중간 협업을 숨기고 새 프로토콜을 만드십시오.

    학점



    사진 제공: Chewy on Unsplash


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




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

    좋은 웹페이지 즐겨찾기