2010-08-06 2 views
5

정적 클래스는 디버깅하기가 매우 어렵고 불가능하다는 것을 한 번 읽었습니다. 이 사실인가요? 왜 그런가요?정적 클래스는 디버깅하기가 매우 어렵고 불가능하다는 것을 한 번 읽었습니다. 이 사실인가요? 왜 그런가요?

예를 들어 도움이 될 경우, 여기에 내가 데이터베이스에 액세스하는 데 사용하는 PHP 클래스입니다 (I이 생각하지 않습니다 비록 PHP 관련 질문입니다) :

<?php 

class DB 
{ 
    private static $instance; 

    private function __construct() { } 

    public static function getInstance() 
    { 
     if(!self::$instance) 
     { 
      self::$instance = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';', DB_USER, DB_PASS); 
     } 
     return self::$instance; 
    } 

    public static function getPreparedStatement($query) 
    { 
     $db = self::getInstance(); 
     return $db->prepare($query); 
    } 

    public static function query($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
    } 

    public static function getResult($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt; 
    } 

    public static function getSingleRow($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt->fetch(); 
    } 

    public static function getMultipleRows($query) 
    { 
     $stmt = self::getPreparedStatement($query); 
     $stmt->execute(); 
     return $stmt->fetchAll(); 
    } 
} 

?> 
+0

당신은 전쟁을 준비하고 있습니다 ... 정적 클래스/메소드에 대한 증오가 많이 있습니다. 그리고 당신이 싱글 톤을 가져올 때 더 악화됩니다 ... – Nix

+0

괜찮습니다 :-) 주제가 궁금합니다. 사람들이 제공하는 답변을 기대합니다. –

답변

4

정적 클래스에 메서드가 있고 데이터가 없으면 이는 단지 네임 스페이스 일뿐입니다. 문제 없습니다. 그러나 고정 데이터이있는 경우 전역 변수와 동일한 문제가 발생합니다. 더 이상 로컬 정보를 볼 때 시스템의 동작을 이해할 수 없습니다. 특히 멀티 스레드 환경에서는 예기치 않은 동작과 디버깅이 어려울 수 있습니다.

+0

많은 의미가 있습니다! –

1

나는 그렇게 생각 될지 당신은 테스팅과 관련이 있다고 읽었습니다.

여기에 대한 자세한 설명은 Misco's 블로그를 참조하시기 바랍니다. 나는 그 (것)들을 정보의 귀중한 근원 발견했다.

정적 메서드의 기본 문제는 절차 코드입니다. 나는 단위 테스트 절차 코드에 대한 아이디어가 없습니다. 단위 테스트에서는 내 응용 프로그램 조각을 인스턴스화 할 수 있다고 가정합니다. . 인스턴스 작성 중에 실제 종속성을 대체하는 mocks/아군들과 종속성을 연결합니다. 절차 프로그래밍 중 아무 것도 없으므로 을 "연결"할 수 없습니다. 코드 과 데이터는 별도입니다.

+0

정적 클래스를 조롱하거나 정적 메서드가있는 클래스를 조롱하는 두 가지 문제가 있다고 생각합니다. 주로 인터페이스를 할 수 없기 때문에 주로. – Nix

관련 문제