2011-08-09 2 views
0

Pro & VB.Net의 클래스의 Shared (정적) 멤버에 대해 Singleton 클래스를 통해 일반적으로 사용되는 메서드를 사용하는 것에 대한 단점을 알고 싶습니다. 시간, 공간 복잡성 또는 모범 사례와 관련 될 수 있습니다.어느 쪽이 더 좋습니까 Singleton 클래스 또는 Shared (정적) 멤버 함수

저는 비즈니스 로직을 수행하는 메소드로 BankAccount 클래스를 가졌습니다.

GetBalance() 
GetLast5Credits() 
GetMiniStatement() 

및 일부 쓰기 작업도 있습니다.

이 시나리오에서 멤버 함수에 액세스하는 더 나은 방법은 무엇입니까? 공유 또는 싱글 톤?

+0

이것은 중복되었지만 너무 게을러서 검색 할 수 없습니다. – CodesInChaos

답변

1

이는 응용 프로그램에 BankAccount가 두 개 이상 있는지 여부에 따라 다릅니다. 기본적으로 Static 또는 Singleton은 문제의 개체 (이 경우 BankAccount)를 하나만 가질 수 있음을 의미합니다. 당신이 저에게 묻는다면 한 은행 계좌를 가진 은행은 꽤 가난한 은행입니다. :) Here 꽤 괜찮은 설명이지만, 예제 코드는 C#

4

도 아니다. 종속성 삽입 인스턴스를 사용해야합니다. 즉, 코드에 인스턴스가 하나만 있다고 가정하지 않습니다. 하나의 인스턴스 만 만들면됩니다. 그렇게하면 여러 인스턴스를 쉽게 사용할 수 있도록 소프트웨어를 변경할 수 있습니다.

여기에 기본적인 아이디어는 당신이 당신의 클래스의 생성자에 매개 변수로 은행 계좌를 가지고 있다는 것입니다 :

class MyClass 
{ 
    private readonly IBankAccount bankAccount; 

    public MyClass(IBankAccount bankAccount) 
    { 
    this.bankAccount=bankAccount; 
    } 
} 

이 많이 전달해야하는 경우 성가신 될 수 수동으로 이러한 클래스를 생성 이후 당신은 대개 의존성 주사기/IoC 컨테이너를 사용하여 작업을 수행합니다.


무 상태 부작용없는 도우미 기능에는 정적 메서드를 사용해야합니다. MathEnumerable에는 정적 메서드에 대한 좋은 예가 있습니다.

일반적으로 전역 변경 가능 상태를 피해야합니다. 은행 계좌가 분명히 바뀔 수 있습니다. 여기서 고전적인 싱글 톤은 덜 나쁜 것입니다 (테스트 목적으로 구현을 대체 할 수는 있지만). 여전히 나쁜 선택입니다.

+0

+1하지만 예제 또는 적어도 하나의 링크는 사람들이'의존성 삽입 인스턴스 '로 무엇을 의미하는지 이해하는 데 도움이 될 것입니다. –

0

개인적으로, 나는 단위 테스트를 위해 싱글 톤 클래스를 선호합니다. 인스턴스 클래스를 모의 수 있지만 정적 클래스 모의 수 없습니다.

1

나는 ... 당신도 여기에 원하는

을 믿지 않지만 향후 참조를 위해 공유 클래스는이 상태를 유지와 아무 상관이 안 넣어 - 각 정적 방법 만 작동한다 전달 된 매개 변수.이 유형의 클래스는 유틸리티 함수에서만 유용합니다.

싱글 톤은 계정과 관련된 데이터를 메모리에 유지하려는 경우에만 유용합니다. 그런 다음 은 인덱서로 싱글 톤을 구현할 수 있습니다. 은행 계좌 레코드 모음이 포함되어 있지만 경쟁 조건을 염두에 두어야합니다.

관련 문제