2017-11-08 1 views
-1

우리는 일반적인 물리적 리소스를 관리하는 시스템을 가지고 있습니다. 500 개 이상의 개별 리소스가 있습니다. 이 시스템은 여러 가지 용도로 사용되며 별칭을 사용하여 소프트웨어를 더 쉽게 작성합니다.별칭 목록이 더 좋습니까?

예를 들어, 실제 리소스 TG67I9에는 "RightDoor"라는 별칭이 지정됩니다. 코드 작성시 TG67I9 대신 RightDoor가 사용되어 코드를 읽기 쉽도록 만듭니다. 이 별칭 목록은 리소스 및 별칭에 대한 참조가있는 텍스트 파일로로드됩니다. 이 시스템은 말 그대로 수백 개의 다른 별칭 목록을 사용하여 동일한 물리적 자원을 참조합니다.

이 유형의 설정에는 두 가지 주요 단점이 있습니다. 먼저 별칭을 사용하여 리소스를 호출하면 리소스가 문자열로 전달됩니다. 예를 들어 Door.Open ("RightDoor"). 이것은 툴팁이나 똑똑한 코드 작성을 어렵게 만드는 어떤 것도주지 않습니다. 기본적으로 별칭 목록을 계속 참조해야합니다. 그것은 RightDoor 또는 Right_Door 또는 right-door입니까 아니면 ... 당신은 아이디어를 얻습니다. 두 번째는 실행될 때까지 매개 변수의 유효성 검사가 없다는 것입니다. 모든 컴파일러는 문자열이 전달 된 다음 행복하다는 것을 알고 있습니다. 코드가 실행될 때만이 함수는 별칭을 통해 리소스에 액세스하려고 시도하고 RightDoor가되어야하기 때문에 오른쪽 도어를 찾을 수 없으므로 실패합니다. 오류가 표시됩니다. 지루한 디버깅이 필요하고 코드를 반복해서 실행하여 잘못된 별칭을 제거해야합니다.

더 좋은 방법이 있나요? 앨리어스 목록은 실제 리소스를 별칭 이름과 상호 참조로 만들 수 있으며 목록을 만든 후에 툴팁에 리소스 제안을 표시 할 수 있습니다. (처음부터 새 시스템을 작성할 수 있다고 가정하십시오.)

VisualStudio 2017 및 C#과 함께 최신 .NET을 사용하여 코드를 작성합니다.

+0

런타임에이 별칭 목록을로드해야합니까? 그렇지 않은 경우에는 컴파일 타임 또는 그 이전에 목록에서 열거 형 정의를 생성 할 수 있습니다. – Blorgbeard

+0

두 개의 열거 형을 서로의 값에 매핑하고 두 개의 열거 형 사이에 캐스트 할 수 있습니까? 나는 그것이 실제로 좋은 제안인지 알기에 당신의 상황에 대해 충분히 알지 못합니다. –

+0

T4를 사용하면 코드를 생성 할 수 있습니다. f.i. 텍스트 파일에서 각 별칭을 생성하고 RightDoor.Open()을 사용할 수 있습니다. –

답변

1

간단한 방법이 대부분이다 "string enum"

public class Resources { 
    public const string 
     LeftDoor = "TG67I8", 
     RightDoor = "TG67I9"; 
} 

샘플 사용 : VS에서 .RightDoor 위로 마우스를

Door.Open(Resources.RightDoor); 

툴팁을 보여줍니다 (constant) string Resources.RightDoor = "TG67I9"
마우스 오른쪽 버튼으로 클릭 .RightDoor 및 모든 참조 찾기를 선택하면 변수가 사용되는 위치가 표시됩니다.


또 다른 옵션은 다음 프로젝트 속성의 리소스 섹션에있는 문자열을 추가 할 수 있습니다

: 자원 (들) 런에서 검색되기 때문에, 조금 느린

using YourProjectNameSpace.Properties; 
... 
Door.Open(Resources.RightDoor); 

하지만 실행 파일과 별도로 사용자 정의 외부 파일에서 자원을로드 할 수 있습니다.

+0

VB.Net 버전 https://stackoverflow.com/questions/12312325/define-string-enum-in-vb-net/16200092#16200092 – Slai

+0

T4 템플릿을 사용하면 별칭 텍스트 파일에서 리소스 클래스를 생성 할 수 있습니다 –

1

상수가있는 정적 클래스를 사용하십시오. 나는 여러 번 똑같은 일을했지만 여전히 그렇게하고있다. 플러스 .NET does this as well.

public static class PhysicalResources 
{ 
    public const string One = "Uno"; 
    public const string Two = "Deux"; 
    // ... 
} 
관련 문제