문제

C#에서 정적 클래스를 사용하는시기를 읽었지만 최고 답변이 반드시 내 질문에 대답하지는 않았습니다. HTTP 서버를 통해 상당히 유사한 하드웨어와 인터페이스하는 응용 프로그램이 있습니다. 각 장치는 로그인해야하며 자격 증명은 일반적으로 동일합니다. Application Wide 설정을 처리하기 위해 Properties.Settings.Default.ETC를 사용하고 있습니다. 그러나 쉽게 장치에 개별적으로 로그인 할 때 마지막으로 사용 된 사용자 이름/비밀번호를 추적합니다. 옵션 창을 통해 해결할 수있는 기본값은 먼저 사용되며 옵션 창을 통해 변경되지 않는 한 기본 설정에도 불구하고 기본값을 사용하여 사용되는 경우에도 동일하게 유지됩니다.

어쨌든, 그것은 시나리오입니다 ... 질문과 관련하여, 나는 이것을하고 있습니다.

private static class TemporarySettings
{
    public static string Username = Properties.Settings.Default["Username"].ToString();
    public static string Password = Properties.Settings.Default["Password"].ToString();
}

그게 바보 야?

도움이 되었습니까?

해결책

그것은 바보가 아니며 문제를 완벽하게 해결할 수 있습니다 (그렇다면 변경하지 마십시오). 그러나이 접근법이 길을 따라가는 몇 가지 문제가 있으며, 그것이 무엇인지 아는 데 도움이됩니다.

  1. 응용 프로그램을 다시 시작하지 않고 사용자 이름과 암호를 변경하려면 해당 옵션이 없습니다. 변경을 위해 구성 파일을보고 값이 변경되면 로직을 작성하여 값을 다시로드 할 수 있습니다.
  2. 여러 사용자 이름과 비밀번호 세트에 대한 코드를 "재사용"하려면 (특히 변경 모니터링과 같은 동작을 추가하는 경우) 인스턴스로 변환해야합니다.
  3. 이 클래스에 의존하는 테스트 클래스를 단위로 만들고 싶다면 그 값을 스터브하는 데 어려움을 겪게됩니다.

그러나 반복하려면이 때문에 가장 간단한 솔루션 (정의 한대로)에서 부끄러워해서는 안됩니다. 잠재적인 앞으로 당신이 그들에 의해 불에 타게 될 가능성이 있다고 생각하지 않는 한 문제. 그렇지 않으면 필요할 때 나중에 인스턴스 클래스로 전환하는 것은 매우 어려운 리팩토링이 아닐 것입니다.

다른 팁

더 나은 것이 더 좋습니다 readonly 또는 getter 만있는 속성을 사용하십시오.

사용자 이름과 비밀번호를 동일한 값으로 설정하지만 그 외에는 아니요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top