코드 스멜 93 - 무엇이든 보내주세요

다양한 (다형성 인수가 아닌) 많은 것을 받을 수 있는 매직 함수

TL;DR: Create a clear contract. Expect just one protocol.



문제


  • Fail Fast 원칙 위반
  • 오류 정리
  • 가독성
  • 나쁜 응집력

  • 솔루션


  • 한 가지 "종류"의 입력만 받습니다
  • .
  • 인수는 단일 프로토콜을 준수해야 합니다.

  • 샘플 코드



    잘못된




    <?
    
    function parseArguments($arguments) {
        $arguments = $arguments ?: null;
        //Always the billion-dollar mistake
        if (is_empty($arguments)) {
            $this->arguments = http_build_query($_REQUEST);
            //Global coupling and side effects
        } elseif (is_array($arguments)) {
            $this->arguments = http_build_query($arguments);
        } elseif (!$arguments) { //null unmasked
            $this->arguments = null;
        } else {
            $this->arguments = (string)$arguments;
        }
    }
    

    오른쪽



    <?
    
    function parseArguments(array $arguments) {
        $this->arguments = $arguments;
        //much cleaner, isn't it ?
    }
    

    발각



    우리는 이러한 종류의 메소드가 서로 다른 일을 할 때 감지할 수 있습니다.

    태그


  • 만약 오염자

  • 결론



    마법 주물과 유연성에는 가격이 있습니다. 그들은 쓰레기를 양탄자 아래에 놓고 빠른 실패 원칙을 위반합니다.

    처지
















    학점



    사진 제공: Hennie Stander on Unsplash


    Referential transparency is a very desirable property: it implies that functions consistently yield the same results given the same input, irrespective of where and when they are invoked.



    에드워드 가슨






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


    좋은 웹페이지 즐겨찾기