개념과 기대치가 적은 다른 예를 들어 봅시다. 여기에 열거 형이 있으며 버그의 우선 순위입니다.
데이터베이스에 어떤 가치를 저장하고 있습니까?
그래서, 저장 될 수있는 'C'
, 'H'
, 'M'
, 및 'L'
데이터베이스입니다. 또는 'HIGH'
등등. 이것은 문자열 형식의 데이터에 문제가 있습니다. 알려진 유효한 값 세트가 있으며 데이터베이스에 해당 세트를 저장 하지 않으면 작업하기가 어려울 수 있습니다.
왜 코드에 데이터를 저장합니까?
당신이있어 List<String> priorities = {'CRITICAL', 'HIGH', 'MEDIUM', 'LOW'};
나 코드에서 그 효과에 뭔가. 즉,이 데이터를 올바른 형식으로 다양하게 매핑했습니다 (모든 캡을 데이터베이스에 삽입하지만으로 표시합니다 Critical
). 코드도 현지화하기가 어렵습니다. 아이디어의 데이터베이스 표현을 코드에 저장된 문자열에 바인딩했습니다.
이 목록에 액세스해야하는 곳이라면 어디에서나 코드 복제 또는 상수가 많은 클래스가 필요합니다. 어느 것도 좋은 옵션이 아닙니다. 또한 이 데이터를 사용할 수 있는 다른 응용 프로그램 (다른 언어로 작성 될 수 있음)을 잊지 말아야합니다 . Java 웹 응용 프로그램에는 Crystal Reports 보고 시스템이 사용되고 Perl 배치 작업이 데이터를 공급합니다. 보고 엔진은 유효한 데이터 목록을 알고 있어야합니다 ( 'LOW'
우선 순위 로 표시된 것이없고 보고서에 유효한 우선 순위인지 알아야하는 경우). 배치 작업에는 유효한 데이터에 대한 정보가 있습니다. 가치는.
가설 적으로, 당신은 할 수 "우리는 단일 언어 가게입니다 - 모든 자바로 작성된 것입니다"라고이 정보를 포함하는 하나의 .jar이 -하지만 지금은 당신을 의미 응용 프로그램을 긴밀하게 서로 연결되어 그 .JAR이 포함 자료. 변경 사항이있을 때마다 웹 응용 프로그램과 함께보고 부분과 배치 업데이트 부분을 해제해야하며 해당 부분 이 모든 부분에서 원활하게 진행 되기를 바랍니다 .
상사가 다른 우선 순위를 원하면 어떻게됩니까?
당신의 상사가 오늘 왔어요 새로운 우선 순위가 있습니다- CEO
. 이제 모든 코드를 변경 하고 다시 컴파일하고 재배치해야합니다.
'테이블에 열거'접근 방식을 사용하면 열거 목록을 새로운 우선 순위로 업데이트합니다. 목록을 가져 오는 모든 코드는 데이터베이스에서 가져옵니다.
거의 독립적 인 데이터
우선 순위를 사용하면 워크 플로에 대한 정보를 포함하거나이 우선 순위를 설정할 수있는 사람 또는 다른 사람을 포함 할 수있는 다른 테이블 의 데이터 키 가 있습니다.
성별은 사용의 대명사로 연결되는 링크가 있습니다 약간의 질문에 언급 한 바와 같이 성별에 다시 가서 he/his/him
하고 she/hers/her
... 당신은 코드 자체에 그 하드 코딩하지 않도록합니다. 그리고 그 다음 당신의 상사로 와서 당신은 당신이있어 추가해야합니다 'OTHER'
(간단하게하는) 성별 당신이이 성별을 관계 할 필요가 they/their/them
... 그리고 당신의 상사는 페이스 북 그래, 음 ...이 무엇을보고있다.
열거 형 테이블이 아닌 문자열 형식의 데이터 비트로 제한함으로써 이제는 데이터와 다른 비트 간의 관계를 유지하기 위해 해당 문자열을 다른 여러 테이블에서 복제해야했습니다.
다른 데이터 스토어는 어떻습니까?
어디에 저장하든 동일한 원칙이 존재합니다.
priorities.prop
우선 순위 목록 이있는 파일이있을 수 있습니다 . 특성 파일에서이 목록을 읽습니다.
에 대한 항목 이있는 문서 저장소 데이터베이스 (예 : CouchDB )가 있고 JavaScript로 유효성 검증 기능enums
을 작성할 수 있습니다 .
{
"_id": "c18b0756c3c08d8fceb5bcddd60006f4",
"_rev": "1-c89f76e36b740e9b899a4bffab44e1c2",
"priorities": [ "critical", "high", "medium", "low" ],
"severities": [ "blocker", "bad", "annoying", "cosmetic" ]
}
약간의 스키마가있는 XML 파일을 가질 수 있습니다.
<xs:element name="priority" type="priorityType"/>
<xs:simpleType name="priorityType">
<xs:restriction base="xs:string">
<xs:enumeration value="critical"/>
<xs:enumeration value="high"/>
<xs:enumeration value="medium"/>
<xs:enumeration value="low"/>
</xs:restriction>
</xs:simpleType>
핵심 아이디어는 동일합니다. 데이터 저장소 자체는 유효한 값 목록을 저장하고 적용해야하는 곳입니다. 여기에 배치하면 코드와 데이터에 대해 추론하기가 더 쉽습니다. chritical
데이터 스토어에서 무엇을 받고 있는지 알기 때문에 매번 가지고있는 것을 방어 적으로 확인하는 것에 대해 걱정할 필요가 없습니다 . 데이터 스토어가 다른 방법으로 전송할 것으로 예상하는 것과 정확하게 일치하며 유효한 값 목록을 데이터 스토어에 쿼리 할 수 있습니다.
테이크 아웃
유효한 값 세트는 코드 가 아니라 data 입니다. 당신은 할 위해 노력 할 필요 DRY 코드 -하지만 중복의 문제는 당신이 중복된다는 점이다 데이터를 오히려 데이터로 그 자리를 존중하고,이를 데이터베이스에 저장하는 것보다, 코드에서.
코드를 데이터에 연결 하지 않았기 때문에 데이터 스토어에 대해 여러 응용 프로그램을보다 쉽게 작성할 수 있으며 데이터 자체에 긴밀하게 연결된 모든 것을 배포해야하는 인스턴스를 피할 수 있습니다 .
CEO
우선 순위를 추가 할 때 전체 응용 프로그램을 다시 테스트 할 필요가 없기 때문에 응용 프로그램을 쉽게 테스트 할 수 있습니다. 우선 순위의 실제 값에 관심이있는 코드가 없기 때문입니다.
코드와 데이터를 서로 독립적으로 추론 할 수 있으므로 유지 관리시 버그를 쉽게 찾고 수정할 수 있습니다.