2014-05-12 6 views
0

싱글 톤과 정적 클래스의 차이를 처음부터 알고 싶지는 않습니다. 사람들이 싱글 톤 클래스를 사용해야 할 때와 정적 클래스를 언제 알고 싶습니다.싱글 톤 및 스태틱 클래스의 실생활 사용 C#

내 애플 리케이션에서 나는 헬퍼 또는 유틸리티 메서드에 대한 정적 클래스를 사용하고 db 연결 및 오류 로거 클래스에 대한 싱글 톤을 사용합니다. 하지만 정적 클래스의 도움으로 SQL DB 연결 개체뿐만 아니라 오류 로깅 시스템을 반환하는 데 사용할 수 있습니다.

저는 싱글 톤 클래스를 사용하는 다른 선임 개발자와 정적 클래스를 사용하는 위치에 대해 정말로 알고 싶습니다.

샘플 상황과 샘플 코드로이 문제를 논의하는 경우 매우 유용합니다. 덕분에

답변

0

매우 광범위한 질문이지만 Singleton을 사용하기 위해 머리를 터뜨린 첫 번째 이유가 있습니다.

일부 캐시 된 개체의 수명을 관리해야 할 때 전용 정적 클래스보다 더 적합합니다. 싱글 톤은 스레드 안전성에 대해 걱정할 필요없이 상태를 새로 고치려는 경우에 적합합니다. 예를 들어 싱글 톤으로 사용되는 클래스가 있고 들어오는 요청에 액세스 할 수있는 캐시 된 속성이나 목록이 많이있는 경우입니다.

Refresh() 방법은 단순히 새로운 인스턴스에 현재 인스턴스를 설정하고 클래스의 개별 속성 새로 고침하지 않아도 될 수

private static YourClass instance = new YourClass(); // first instance 

public static void Refresh(){ 
    instance = new YourClass(); // creates a new, refreshed instance while not needing to worry about thread safety 
} 

public static YourClass Instance{ 
     get{ 
     return instance; 
     } 
} 
1

약 결합 시스템을 만드는 경우 정적 클래스를 사용할 수 없습니다 (추상화를 구현할 수없고 삽입 할 수 없기 때문에). 정적 클래스도 모의하기가 매우 어렵 기 때문에 TDD 또는 간단한 단위 테스트를 수행하는 경우 선택하지 않아도됩니다. 따라서 비즈니스 요구 사항과 관련이 없으며 조롱 받아서는 안되는 종속성에 대해서만 사용합니다. 예 : 로깅 또는 매핑과 같은 인프라 구조 논리.

기존 클래스를 확장 할 수 없지만 편리한 멤버 형 API가 필요한 경우 확장 메서드에도 정적 클래스를 사용합니다. 일반적으로 비즈니스 논리가 포함되지 않은 매핑이나 직렬화와 같은 인프라 관련 확장입니다.

0

데이터베이스 액세스 객체를 만들 때 나는 보통 싱글 톤 클래스를 사용합니다. 어디에서 객체의 인스턴스를 응용 프로그램 내부에 둘 수 있습니다.

나는 일반적으로 특정 자산을로드 할 때 가끔 로더 클래스를 제외하고 정적 클래스에서 멀리 떨어져 있습니다.