문제

데이터 객체가 있습니다 ( 'Entry'라고 말하면).

1 - Created
2 - File added
3 - Approved
4 - Invalid

이는 AutoNumber 기본 키가있는 '상태'테이블이있는 데이터베이스에 표시되고 메인 테이블에 '상태'필드가 있으며 적절한 관계가 설정되어 있습니다.

내 (사용자 정의) 데이터 계층에는 'Entry'객체가 있으며 현재 위에 나열된 상태와 열거를 선언합니다. 마지막으로 나는 적절한 공공 재산과 함께이 열거의 개인 사례를 선언합니다.

내 'commit ()'메소드에서 열거의 인스턴스를 정수에 시전하여 업데이트 저장 프로 시저로 전달합니다.

내 정적 'getEntry ()'메소드에서는 데이터베이스에서 정수를 전달할 것입니다. 그런 다음 'enum.parse ()'메소드를 사용하여 반환 된 상태 정수에 해당하는 열거의 인스턴스 인 객체를 추출합니다. 나는 이것을 열거의 유형으로 캐스팅하여 로컬 개인 변수에 할당합니다.

내 질문은 매우 간단합니다.이 접근법은 적절하며, 원시 정수 값을 저장하는 것 외에 대안이 아니라면 (반드시 반대하는 것은 아닙니다) 더 좋습니다.

내 이유는이 모든 것이 나에게 엄청나게 지저분 해 보이기 때문입니다. 나는 혜택이 데이터 객체의 소비자에게 더 나은 경험에 있다는 것을 인정하지만, 그럼에도 불구하고 ...

감사!

도움이 되었습니까?

해결책

우리는 프로젝트 중 하나에 익숙한 것이 있습니다. 항목 유형이 포함 된 테이블이 있습니다. 이러한 유형에는 ID가 있습니다. 코드에는 동일한 ID가있는 열거가 있습니다. 문제는 데이터베이스에서 Autonumber (Identity)를 사용하지 않으므로 ID를 완전히 제어 할 수 있습니다. 그리고 우리의 객체를 저장할 때 우리는 개체를 저장하기 위해 열거의 ID를 가져옵니다. 나는 또한이 접근법이 지저분하다고 생각했지만 결국 그다지 나쁘지는 않습니다.

다른 팁

그 방법은 나에게 괜찮아 보인다.

과거에 나는 같은 일을했지만 열거의 각 구성원에 대해 행이 포함 된 테이블이 있었는 각 상태는 실제 열거를 볼 필요가 없었습니다.

예를 들어, 열거 된 것 같은 경우

enum status
{
    Active,
    Deleted,
    Inactive
}

다음 레코드가있는 상태라는 테이블이있을 것입니다.

신분증
0 활성
1 삭제
2 비활성

그러면 그 테이블은 그 열거를 사용한 테이블의 외국 키가 될 것입니다.

네, 괜찮습니다!

항상 이와 같은 값을 명시 적으로 설정하십시오. 그렇게하면 누군가가 무언가를 추가하기 위해 가치가 중요하고 엉망이되어서는 안된다는 것을 깨닫게 될 것입니다.

enum status
{
    Active = 1,
    Deleted = 2,
    Inactive = 3
}

WCF를 통해 주변의 가치를 전달하는 경우 추가하는 것이 좋습니다.

  NULL = 0

그렇지 않으면 데이터베이스에서 오는 0을 직렬화하려고하면 끔찍한 오류가 발생하여 디버그에 영원히 걸립니다.

데이터베이스 조회 테이블이 필요합니다. 프로그램 열거는 코드에 '마법 숫자'를 피하기에 편리합니다.

그러나 코드가 상태를 조작 할 필요가 없으면 열거는 불필요합니다.

나는 항상 열거 로이 접근법을 수행합니다. 변경 될 것으로 예상되지 않는 상태와 같은 간단한 항목이라면 열거를 선호합니다. 구문 분석 및 캐스팅은 충격 작업이 매우 낮습니다.

나는 지금 언젠가는 문제없이 LINQ에서 SQL을 성공적으로 수행하고 있습니다. LINQ는 실제로 ENUM에서 Int로, 다시 자동으로 변환합니다.

코드는 단순한 속도 이상의 것이 아니라 가독성 이상입니다. 열거는 코드를 읽을 수있게합니다.

귀하의 질문에 직접 답변하는 것은 매우 유효한 Apporach입니다.

코드에 알려진 "상태"값을 설정 해야하는 경우 (ENUM에서 정의한), 아마도 해당 "상태"값이 데이터베이스에 존재 해야하는 요구 사항 일 수도 있습니다. 그것들은 존재해야하기 때문에 각 값에 할당 된 상태_id를 제어해야합니다.

신원을 떨어 뜨리고 조회 값 ID를 명시 적으로 설정하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top