2014-09-25 3 views
0

참조 용 조회 테이블을 사용하고 있습니다. 예 : 등록 유형, 관리자, 중재자를 선택한 다음 공장을 사용하여 등록 유형을 결정합니다. 강력한 유형의 등록 비교 방법을 만드는 가장 쉬운 방법은 무엇입니까? enum에 유사한 동작을 정렬합니다. 예를열거 형 또는 유사한 데이터베이스 조회 테이블

pssudo 코드

class regfactory 
{ 
    case()   
     if(regType.Admin: return new adminReg()  
} 

을 위해 내가 생각할 수있는 유일한 방법은 데이터베이스에서 생성 된 마법 문자열의 사전입니다.

+0

나는 정확한 질문을 이해하지 못한다고 생각합니다. 하지만 데이터베이스의 자체 테이블에서 형식을 사용할 때 C#에서 열거 형을 생성합니다. 그래서 데이터베이스에있는 경우 "1, Admin", "2, Moderator"행이있는 "RegistrationType"테이블이 있습니다 ... 숫자가 테이블의 기본 키이므로 C#으로 변환 할 수 있습니다. "enum : int {Admin = 1, 중재자 = 2, ...}을 입력 한 다음 제안대로 입력하십시오. – Sasse

답변

4

난 당신의 상황에 대한 강력한 형식의 열거 형을 달성하는 유일한 방법은 코드 코드 생성 될 bevieve. 컴파일하기 전에 생성되지 않은 것은 강력한 타이핑에 도움이되지 않습니다. T4 template to Generate Enums

또 다른 방법은 더 나은 읽을 열거 이름을 '생성'할 (경우에 당신이 그들을 필요) https://github.com/MehdiK/Humanizer에서 휴머 나이저 프로젝트는 다음과 같습니다

로버트 Koritnik이 할 수있는 매우 매끄러운 방법을 기록했다.

0

실용적인 관점에서 보면 오류가 발생하기 쉬운 것처럼 보일 수 있습니다. 데이터에 대한 액세스를 중앙 집중화하지 않고 유지 관리 중에 동기화되지 않을 위험을 감수하면서 좋은 규칙을 위반하는 것처럼 느낄 수도 있습니다. 그러나 아키텍처 관점에서 보았을 때 룩업 데이터에 대해 이야기하고있는 것을 고려하면, "정적 데이터 계약"의 일부이므로 하드 코딩하는 것이 좋습니다.

그 중 많은 수가있는 경우 해당 값을 변경하면 빌드 또는 데이터베이스 패치 스크립트를 업데이트 할 수있는 형식으로 해당 상수를 넣을 수 있습니다. 열거 형에서 잘 작동합니다.

일부 ORM은 코드 첫 번째 접근 방식을 채택한 경우 이러한 값을 동기화하여 유지할 수있는 EF를 포함하여 열거 형을 지원합니다. 그러나 우리는 소프트웨어에 완전히 새로운 레이어를 추가하는 것에 대해 이야기합니다. 따라서 정적 look-up 데이터를 동기화하여 유지하는 것보다 더 많은 이유가 있어야합니다.

0

반영을 C#에서 사용할 수 있습니다. 지정된 네임 스페이스에 선언 된 클래스를 나열하는 훌륭한 예가 this answer입니다.

그런 다음 등록 유형 이름을 사용 가능한 클래스 이름과 비교하여 인스턴스화 할 클래스를 결정합니다.

관련 문제