2011-02-14 2 views
8

내 생각은 내 Asp.Net MVC 응용 프로그램에서 마법의 문자열 키를 피하는 것입니다. 이렇게하려면 문자열 상수 키를 만들어 응용 프로그램에서 공유하려고합니다.마술 문자열 키를 피하는 더 좋은 방법은 무엇입니까? 클래스에서 문자열 상수 키를 사용하거나 열거 형을 사용합니까?

예를 들어 TempData["Message"] 대신 TempData[MyClass.Message] 또는 TempData[MyEnum.Message.ToString()]을 쓸 수 있습니다.

public class MyClass 
{ 
    public const string Message = "Message"; 
} 

public enum MyEnum 
{ 
    Message, 
    Others 
} 

내 질문

은 다음과 같습니다 : 마법 문자열 키를 피하기 위해 더 좋은 방법은 무엇입니까? 클래스에서 문자열 상수 키를 사용하거나 ToString()과 함께 열거 형을 사용합니까?

답변

5

기본 설정 및 사용법입니다.

당신은 강력한 형식의 방법으로 열거 된 값을 적용 할 수 있습니다 : const를 문자열로

public void SomeFunction(MyEnum someValue) 
{ 
} 

또는

TempData[MyEnum.Message] 

, 당신은 할 수 없습니다.

또한 열거 형의 값을 열거 할 수있는 기본 제공 방법이 있습니다.

제공하지 않은 세 번째 옵션이 있는데, 이는 구성 설정 (App.Config)에 "상수"를 배치하는 것입니다. 이렇게하면 컴파일 시간 후에 구성 할 수 있습니다. 당신은 지금 이것을 필요로하지 않을 수도 있지만, 미래에는 그렇게 할 수도 있습니다. 그래서 고려할 가치가 있습니다.

이들 중 하나는 세계화 목적으로 더 좋을 수 있습니다. 나는 앱을 세계화 한 적이 없기 때문에 어느 것이 확실하지 않습니다. 어느 쪽이 위성 어셈블리에서 작동하든, 나는 생각한다.

기본적으로는 TempData이 무엇이며 어떻게 사용 하시겠습니까?

5

const 문자열은 사용자의 요구 사항 인 경우 공백/특수 문자도 포함 할 수 있으므로 이동해야합니다. 그렇지 않으면 TempData를 Dictionary<MyEnum,object>으로 변경하는 것이 더 나은 접근 방법입니다.

+2

일 - - "Flash.Alert ('NO 오!')"'Enum' 허용하지 않는 공간에 대한 좋은 지적입니다. –

2

이 답변을 알고 있지만 여기에 내 생각을 던지고 싶습니다. TempData [ "Message"]가 실제로 Session [ "Alert"] "이어야한다고 결정할 때 내 응용 프로그램을 어떻게 파탄에서 벗어나려고합니까? . 또는 그런 일

매직 문자열 사전 키에 적용되지 않습니다 -. 그들이 뭔가 문자열 값을 기준으로 않는 루틴으로 전송 된 메시지에 적용 비슷해 "대해 setStatus를 ('현재')"마법의 것

.

여기에서 원하는 것은 메시징을 처리하는 중앙 집중식 방법을 사용하는 것입니다. 원한다면 도우미 클래스를 만들어 "Messaging"이라고 부르십시오. 모든 Railsy를 가져 와서 "Flash"라고 부르면됩니다. 그루비 같은 "Flash.Message ("안녕하세요 ")"-이 메커니즘을 숨겨져 있어야합니다 (있어야합니다) 그리고 당신은 걱정하지 않는거야 그 바보 같은 사전 키에 대해서.

당신은이를 확장 할 수 있습니다 - 등

+0

좋은 게시글입니다. 나에 관해서는 "SetStatus ('current')"와 같은 데이터를 저장하고 캐시에 저장하고 싶습니다. 왜냐하면 내가 이것을 바꾸고 싶다면 내 앱을 다시 만들 필요가 없기 때문이다. –

관련 문제