2016-07-29 1 views
0

내 모델 클래스 중 하나에 열거 형을 사용하므로 잘못된 값이 전달되는 것에 대해 걱정할 필요가 없습니다.데이터베이스 및 GUI와 관련하여 모델 코드에서 열거 형을 사용할 때 코드 중복 줄이기

내가 가진 문제는 열거 형 때문에 코드 전체에서 많은 코드가 중복된다는 것입니다. 내가 열거를 변경할 때마다 나 또한 모든 것을 작업하기 위해 내 코드의이 부분을 변경해야합니다 :

  • 변경을 열거 자체
  • 변경 SQL 테이블 정의 (내가 MySQL의 열거 형을 사용)
  • 내 데이터 액세스 레이어에서 enumToString 변환 테이블을 변경
  • (올바른 열거 항목을 다시 검색 값을 변환)
  • 변경 내 데이터 액세스 레이어에서 stringToEnum 변환 테이블 (필자는 SQL 쿼리에 대한 문자열이 필요합니다) 내 GUI에 대한 enumToPrettyString 변환 테이블 변경 사용자가
을 선택하는 데 사용은 그래서 모든 가능한 항목 내 GUI에서 드롭 다운 박스를 채울 수
  • 변경 가능한 모든 열거 항목의 목록 (대신 하나를 저장 한 데이터베이스의 사람이 읽을 수있는 문자열을 표시)

    Javas Enum 클래스가 더 강력하다는 것을 알고 있고 열거 항목 정의에이 정보를 직접 추가 할 수 있지만 C++ 열거 형은 내부적으로 정수이므로 해당 편의를 얻지 못합니다.

    여기 코드 중복을 최소화하는 방법에 대한 아이디어가 있으십니까?

  • +0

    당신은 *'두 개의 큰 enums'을 가지고 있습니다 * - 우물 : (1) "큰"을 의미하는 것 : 많은 요소? (2) 문제는 열거 형의 양으로부터 독립적이지 않은가? 단지 * 열거 형으로 줄이는 것이 낫지 않겠는가? – Wolf

    +1

    네 말이 맞아, 나는 두 가지 열거 형 모두 같기 때문에 질문을 바꿔 말할 것이다. "빅"은 10 ~ 30 개 항목을 의미합니다. –

    +0

    변환의 모든 기능을 추상화하고'DLL/.so'의 클라이언트가 요구하는 것들을 정확하게 제공 할'DLL/.so'를 만들 것을 제안 할 것입니다. 이런 식으로'enum' 정의는 enum/members/entries를 추가/삭제/변경하는 동안 변경됩니다. – sameerkn

    답변

    2

    이것은 코드 생성을위한 좋은 후보입니다. 열거 형에 대한 단일 명세를 작성한 다음 모든 언어 환경에서 필요한 모든 변환 코드를 생성하십시오. 빌드 시스템을 활용하여 최신 상태로 유지하십시오. 가장 큰 함정은 저수준 정수 표현을 저장하거나 직렬화하는 경우 열거 형 생성자를 제거하거나 용도 변경하지 말고 (대신 끝에 새로운 열거 형을 추가) 조심해야한다는 점입니다.