내 프로그램에서 사용하는 다양한 상수가 있습니다 ... 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";
}