코드 냄새 150 - 동등 비교

모든 개발자는 속성을 동일하게 비교합니다. 그들은 틀렸다.

TL;DR: Don't export and compare, just compare.



문제


  • 캡슐화 중단
  • 코드 중복
  • 정보 은폐 위반
  • 의인화 위반

  • 솔루션


  • 단일 방법으로 비교 숨기기

  • 문맥



    속성 비교는 코드에서 많이 사용됩니다.

    우리는 행동과 책임에 집중해야 합니다.

    다른 객체와 비교하는 것은 객체의 책임입니다. 우리 자신이 아닙니다.

    Premature Optimizers는 이것이 성능이 낮다고 알려줍니다.

    우리는 그들에게 실제 증거를 요청하고 보다 유지 가능한 솔루션을 대조해야 합니다.

    샘플 코드



    잘못된




    if (address.street == 'Broad Street') {
    
    
    if (location.street == 'Bourbon St') {
    
    // 15000 usages in a big system  
    // Comparisons are case sensitive
    

    오른쪽



    if (address.isAtStreet('Broad Street') {
        }
    
    // ...
    
    if (location.isAtStreet('Bourbon St') {
        }  
    // 15000 usages in a big system  
    
    function isAtStreet(street) {
      // We can change Comparisons to case sensitive in just one place. 
    }
    
    

    발각



    [X] 반자동

    구문 트리를 사용하여 속성 비교를 감지할 수 있습니다.

    다른 많은 냄새와 마찬가지로 기본 유형에 대한 좋은 용도가 있을 수 있습니다.

    태그


  • 캡슐화

  • 결론



    책임을 한곳에 두어야 합니다.

    비교도 그 중 하나입니다.

    비즈니스 규칙 중 일부가 변경되면 단일 지점을 변경해야 합니다.

    처지











    학점



    사진 제공: Piret Ilver on Unsplash


    Behavior is the most important thing about software. It is what users depend on. Users like it when we add behavior (provided it is what they really wanted), but if we change or remove behavior they depend on (introduce bugs), they stop trusting us.



    마이클 페더스






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


    좋은 웹페이지 즐겨찾기