싱글 톤 데이터 액세스 계층
-
05-07-2019 - |
문제
직장에서의 데이터 액세스 계층에서 우리는이 표준 구현이 있습니다.
public static CustomerController Instance
{
get
{
lock(singletonLock)
{
if( _instance == null )
{
_instance = new CustomerController();
}
return _instance;
}
}
}
이제 코드가 수행하는 일을 얻었지만 클래스가 사용될 때마다 수업 인스턴스를 만드는 것만으로 도이 작업을 수행하는 이유가 궁금했습니다.
해결책
편집 : 오, 나는 "데이터 액세스 계층"부분을 잡지 못했습니다. 그러나 그 예도 있습니다. 멀티 스레드 앱이 싱글 톤 클래스를 통해 모든 '데이터베이스가 호출하는 경우, 한 스레드 만 레이스 조건을 피하기 위해 데이터베이스에 한 번에 액세스 할 수 있습니다.
멀티 스레드 애플리케이션에 모든 예외를 뱉어 내고 정보를 작성하는 데 사용하는 멀티 스레드 애플리케이션에 로깅 메커니즘이있는 경우 (특히 실행중인 서비스 또는 항상 실행중인 앱, 물건이 발생할 때마다 상태를 인쇄 할 경우) 파일에 실행됩니다. -고정 문제. 싱글 톤 로거 클래스를 사용하므로 하나의 스레드 만 로거에 액세스 할 수 있고 나머지는 로거가 텍스트 파일에 라인을 자유롭게 쓸 수있을 때까지 기다립니다.
싱글 톤을 사용해야 할 멋진 이유가 많이 있지만, 나는 당신과 같았으며 멀티 스레드 앱에서 파일 액세스 로이 문제를 해결하기 전까지는 그들이 무엇을했는지 전혀 몰랐습니다.
다른 팁
이렇게 할 수도 있습니다. 이중 점검 잠금 장치는 싱글 톤에 대한 액세스 속도가 빨라집니다.
public static CustomerController Instance
{
get
{
if( _instance == null )
{
lock(singletonLock)
{
if( _instance == null )
{
_instance = new CustomerController();
}
}
}
return _instance;
}
}
대답은 매우 간단합니다. 같은 사용될 때마다 물체.
그것은 당신에게 클래스 객체라는 장점과 함께 글로벌 변수 (즉, 하나만 있음)의 장점을 제공합니다 (무엇보다도 처음으로 필요할 때 보이지 않는 초기화를 수행 할 수 있습니다).