2010-03-04 3 views
3

이 질문은 간단하게하기 위해 생략 한 큰 문제를 파악하려고 할 때 발생했습니다.속성에서 문자열 길이 제한

저는 C#에서 특정 데이터 구조를 나타내야합니다. 이 프로토콜은 외부 시스템과 통신하는 데 사용됩니다. 따라서 미리 정의 된 길이와 정수 (또는 더 복잡한 데이터)가있는 문자열 시퀀스가 ​​있습니다. 이제 가정 해 봅시다 : 자,이를 표현하는 나의 선호하는 방법은

class Message 
{ 
    string System {get; set; };  // four characters only! 
    string Application {get; set; }; // eight chars 
    int Id {get; set; }; 
} 

문제가 있으므로, 문자열을 사용하는 것입니다

SYSTEM : four chars 
APPLICATION : eight chars 
ID : four-byte integer 

: 나는 미리 정의 된 길이보다 더하지 않는 문자열을 확인해야합니다. 게다가,이 헤더는 실제로 필드의 10 분의 1을 가질 것이고, 그것들은 때때로 바뀔 것입니다 (우리는 여전히 메시지 레이아웃을 결정하고 있습니다).

이러한 구조를 설명하는 가장 좋은 방법은 무엇입니까? 예를 들어 XML을 데이터 설명과 함께 사용하여 리플렉션을 사용하여 구현을 준수하는 클래스를 만들려고 생각했습니다 (프로그래밍 방식으로 액세스해야하기 때문에).

그리고 말했듯이, 더 많은 문제가 있습니다. 문자/숫자의 수를 제한하는 다른 유형의 데이터 유형이 있습니다 ...

답변

7

처음에는 : 전체 길이 문제. 자동 속성을 사용하지 않아도 쉽게 해결할 수 있습니다. 대신 자신의 필드를 선언하고 속성을 "구식"방식으로 작성합니다. 그런 다음 setter에서 요구 사항의 유효성을 검사하고 예외가 발생하거나 유효하지 않은 경우 새 값을 삭제할 수 있습니다.

구조 변경 : 클래스를 변경하고 변경할 수없는 경우 사전을 사용하여 솔루션을 작성할 수 있습니다 (저장하려는 데이터 유형 당 하나만 가능). 값. 허용되는 필드, 유형 및 유효성 확인 요구 사항을 설명하는 일종의 파일 (아마도 XML)을 추가하십시오.

그러나 최종 구조를 아직 결정하지 않았기 때문에 방금 변경 중이라면 클래스를 변경하는 것이 더 좋을 것입니다. 응용 프로그램을 배포 할 때 이러한 종류의 동적 구조가 필요하지 않으면 시간 낭비와 같이, 수업을 바꾸는 것보다 역동적 인 것을 쓰는 데 더 많은 시간을 소비하게 될 것이기 때문입니다.

+0

+1이 세 단락은이 질문에 대한 내 생각을 설명합니다. 그래서 나는 정말로 겁에 질리게됩니다. –

+0

Michael, KISS를 준수하기 때문에 좋은 답변입니다. 그러나 XML을 사용하려는 나의 희망은 non-C# -programmers가 데이터의 설명을 변경할 수있게하는 것입니다. 나는 관련된 노력 때문에 수업을 변경하려는 생각을 싫어합니다. 하지만 어쩌면 나는 게으르다. 단순함을 위해 +1. –

+0

@Bruno : 나는 당신의 구체적인 시나리오에 대해 충분히 알지 못한다. 그렇다고해서 그 일을하게하는 데는 어떤 시점이 있는지 알지 못하지만이 클래스의 정의를 바꾸는 것만으로는 충분하지 않다는 것을 기억하라. 어쨌든이 새로운 필드와 변경된 필드를 처리하는 코드가 필요할 것입니다.이 클래스에 물건을로드하고 저장하는 방법을 알아야합니다. 또한 이것이 외부 시스템과 통신하기위한 프로토콜의 추상화라고 말했기 때문에이 시스템은 변경 사항을 처리하는 방법을 어떻게 알 수 있습니까? –