코드 냄새 124 - 분기 변경

7976 단어
수업에서 무언가를 변경합니다. 같은 클래스에서 관련 없는 것을 변경합니다.

TL:DR; Classes should have just one responsibility and one reason to change.



문제


  • 코드 복제
  • 낮은 응집력
  • 단일 책임 원칙 위반

  • 솔루션


  • 추출 클래스

  • 문맥



    우리는 책임을 다하기 위해 수업을 만듭니다.

    개체가 너무 많은 작업을 수행하면 다른 방향으로 변경될 수 있습니다.

    샘플 코드



    잘못된




    class Webpage {
    
      renderHTML(): {
        renderDocType();
        renderTitle();
        renderRssHeader();
        renderRssTitle();
        renderRssDescription();
       // ...
      }
      //HTML render can change
    
      renderRssDescription() {
       // ...
      }
    
      renderRssTitle() {
       // ...
      }
    
      renderRssPubDate() {
       // ...
      }
      //RSS Format might change
    
    }
    

    오른쪽



    class Webpage {
    
      renderHTML() {
        this.renderDocType();
        this.renderTitle();
        (new RSSFeed()).render();
        this.renderRssTitle();
        this.renderRssDescription();
       // ...
      }
      //HTML render can change
    }
    
    class RSSFeed {
      render() {
        this.renderDescription();
        this.renderTitle();
        this.renderPubDate();
        //...
      }  
      //RSS Format might change
      //Might have unitary tests 
      //etc
    }
    

    발각



    [X] 반자동

    대규모 클래스를 자동으로 감지하거나 변경 사항을 추적할 수 있습니다.

    태그


  • 커플링

  • 결론



    클래스는 단일 책임 원칙을 따라야 하며 변경할 이유는 단 하나입니다.

    다른 방식으로 진화한다면 너무 많은 일을 하고 있는 것입니다.

    처지
















    더 많은 정보


  • Refactoring.guru



  • A design that doesn’t take change into account risks major redesign in the future.



    에리히 감마






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


    좋은 웹페이지 즐겨찾기