코드 냄새 60 - 글로벌 클래스

수업은 편리합니다. 언제든지 호출하고 호출할 수 있습니다. 좋은가요?

요약: 클래스를 글로벌 액세스 지점으로 사용하지 마십시오.

문제


  • 커플링
  • 네임스페이스를 사용하지 않는 한 클래스는 전역적입니다.
  • 이름 오염
  • 정적 메서드
  • 정적 상수
  • 싱글턴

  • 솔루션


  • 네임스페이스, 모듈 한정자 또는 유사 항목 사용
  • 네임스페이스 오염을 피하고 전역 이름을 가능한 한 짧게 유지하십시오.
  • 클래스 단일 책임은 인스턴스를 만드는 것입니다.

  • 샘플 코드



    잘못된




    <?
    
    final class StringUtilHelper {
        static function reformatYYYYDDMMtoYYYYMMDD($date) {
        }
    }
    
    class Singleton {
    
    }
    
    final class DatabaseAccessor extends Singleton {
    
    }
    

    오른쪽



    <?
    
    namespace Date;
    
    final class DateFormatter {
    
        function reformatYYYYDDMMtoYYYYMMDD(Date $date) {
        }
        //function is not static since class single responsibility is to create instances and not be a library of utils
    
    }
    
    namespace OracleDatabase;
    
    class DatabaseAccessor {
        //Database is not a singleton and it is namespace scoped
    }
    

    발각



    거의 모든 린터를 사용하거나 잘못된 클래스 참조를 검색하는 종속성 규칙을 만들 수 있습니다.

    태그


  • 글로벌

  • 결론



    우리는 클래스를 작은 도메인으로 제한하고 외관만 외부에 노출해야 합니다. 이렇게 하면 커플링이 크게 줄어듭니다.

    처지











    더 많은 정보












    학점



    사진 제공: Alfons Morales on Unsplash

    Write shy code — modules that don't reveal anything unnecessary to other modules and that don't rely on other modules' implementations.



    데이브 토마스








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


    좋은 웹페이지 즐겨찾기