내 프로그램에서 사용하는 다양한 상수가 있습니다 ... string's, int's, double's 등 ... 그것들을 저장하는 가장 좋은 방법은 무엇입니까? Enum데이터가 모두 동일한 유형이 아니므로 각 값을 수동으로 설정하고 싶기 때문에을 원하지 않는다고 생각 합니다. 모두 빈 클래스에 저장해야합니까? 아니면 더 좋은 방법이 있습니까?
답변:
정적 읽기 전용 속성이있는 정적 클래스에있을 수 있습니다.
public static class Routes
{
public static string SignUp => "signup";
}
상수로 가득 찬 클래스를 사용하는 IMO는 상수에 적합합니다. 가끔씩 변경되는 경우 구성에서 AppSettings를 사용하고 대신 ConfigurationManager 클래스를 사용하는 것이 좋습니다.
실제로 AppSettings 또는 이와 유사한 것에서 가져온 "상수"가있을 때 구성 관리자의 읽기를 래핑하는 "상수"클래스가 항상 있습니다. 상기 설정 값을 소비하고자하는 장소에 Constants.SomeModule.Setting직접 의지하지 않고 갖는 것이 항상 더 의미가 있습니다 ConfigurationManager.AppSettings["SomeModule/Setting"].
이 설정에 대한 보너스 포인트 SomeModule는 상수 파일 내부에 중첩 된 클래스 일 가능성이 높 SomeModule으므로 종속성 주입을 사용하여 종속 된 클래스에 직접 삽입 할 수 있습니다 . 또한 인터페이스를 추출한 SomeModule다음 ISomeModuleConfiguration소비 코드에 대한 종속성을 생성 할 수도 있습니다. 그러면 상수 파일에 대한 종속성을 분리 할 수 있으며, 특히 이러한 설정이 AppSettings 및 설정은 환경에 따라 다르기 때문에 구성 변환을 사용하여 변경합니다.
내가 좋아하는 것은 다음과 같습니다 (그러나 올바른 유형의 상수 를 사용하려면 끝까지 읽으십시오 ).
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
왜 const당신이 원하는 것이 아닐 수 있는지 알아 보려면 이것을 읽으십시오 . 가능한 상수 유형은 다음 과 같습니다.
const필드. 값이 다른 어셈블리에서 컴파일 타임에 하드 코딩되므로 나중에 값 이 변경 될 수있는 경우 어셈블리 ( public또는 protected)에서 사용하지 마십시오 . 값을 변경하면 다시 컴파일 될 때까지 다른 어셈블리에서 이전 값을 사용합니다.static readonly 필드static 없는 재산 set빈 정적 클래스가 적절합니다. 여러 클래스를 사용하여 하나의 거대한 Globals.cs 파일이 아닌 관련 상수의 좋은 그룹을 만들도록 고려하십시오.
또한 일부 int 상수의 경우 표기법을 고려하십시오.
[Flags]
enum Foo
{
}
이것은 flags와 같은 값 을 처리 할 수 있도록 허용합니다 .
web.config 또는 app.config 사용에 대한 또 다른 투표. 구성 파일은 연결 문자열 등과 같은 상수를위한 좋은 장소입니다. 이러한 유형의 항목을 보거나 수정하기 위해 소스를 볼 필요가 없습니다. .config 파일에서 이러한 상수를 읽는 정적 클래스는 애플리케이션이 이러한 리소스에 코드에 정의 된 것처럼 액세스 할 수 있도록하지만 쉽게보고 편집 할 수있는 유연성을 제공하므로 좋은 절충안이 될 수 있습니다. 우주.
정적 읽기 전용으로 정적 클래스를 제안합니다. 아래 코드 스 니펫을 찾으십시오.
public static class CachedKeysManager
{
public static readonly string DistributorList = "distributorList";
}