유형은 이유 때문에 존재합니다. 만약 아무런 이점이 없다면, 우리는 그것들을 갖지 못하고 사용하지 않을 것이며 우리는 단지 "유형"을 가질 것입니다. 그들은 편리하고 안전과 효율성을 추가합니다. 다음은 문자열이 아닌 항상 기본 형식으로 유형을 유지해야하는 이유의 목록입니다 . 필자 DateTime
는 대부분 예제로 사용 했지만 정수, 소수, 이진 등과 같은 모든 기본 유형에 동일한 원칙이 적용됩니다.
데이터 저장소
제약
구속 조건
거의 모든 데이터 저장소는 데이터에 대한 제약 조건을 지정할 수 있으며 여기에는 유형 제약 조건이 포함됩니다. DateTime
인스턴스 지정의 주요 이점 중 하나는 저장된 데이터가 해당 유형으로 제한된다는 것입니다. 상점에 데이터가 삽입 된 방식에 관계없이 날짜 시간 이외의 다른 것은 입력 할 수 없습니다. 후자는 상점과 직접 상호 작용하는 여러 프로세스가있는 더 큰 시스템에 중요합니다. 또한 2 월 30 일과 같이 잘못된 날짜를 추가하는 것도 포함됩니다 (2 월은 윤년에는 29 일, 비 윤년에는 28 일만있을 수 있음).
검증 제약
삽입 된 날짜가 현재 날짜를 초과하지 않거나 시작 날짜가 종료 날짜 이전에 발생하는지 확인하는 것과 같이 데이터 저장소에서 구현할 수있는 유효성 검사 제약 조건도 있습니다.
운영
대부분의 데이터 저장도 같은 작업 / 기능을 내장 한 DateAdd
또는 DatePart
MS SQL 서버한다. 이를 통해 데이터가 아직 상점에있는 동안 (아직 애플리케이션으로 검색되지 않은) 특정 데이터 필터링 또는 선택을 시작할 수 있습니다.
보편적으로 수용되는 형식
기본 유형을 사용하면 상점과 상호 작용하는 다른 개발자 또는 시스템에 해당 기본 유형이 저장되는 방법에 대한 세부 사항을 알 필요가 없습니다. 해당 유형이 문자열로 저장된 경우에는 해당되지 않으며, 모든 사람이 해당 DateTime
문자열 표현 의 형식을 이해하도록해야합니다 . 이 시스템은 데이터 원본의 로캘, 지역 및 문화권에 걸친 데이터, 응용 프로그램의 실제 위치 및 해당 데이터와 상호 작용하는 최종 사용자 / 시스템의 특성을 처리 할 때 취약합니다. 예 : 한 국가의 날짜 형식은 미국과 같이 MM / dd / yyyy 일 수 있지만 다른 국가에서는 dd / MM / yyyy 일 수 있으며 차이가 거의 불가능하다는 것을 감지합니다.
속도
검색 속도, 유효성 검사 속도, 작업 속도 및 스토리지 효율성도 모두 중요한 요소입니다. 검색 속도의 예 : 데이터 저장소는 열에 대한 인덱스를 허용하며 이러한 인덱스는 일반적으로 형식이 기본 형식으로 저장된 경우 더 효율적으로 사용될 수 있습니다.
신청
데이터 접근
개발자가 스토리지 형식에 대해 추측 할 필요가 없으므로 기본 유형 시스템을 사용하여 상점에 대한 쿼리 실행이 더 간단 해집니다. 거의 모든 데이터 저장소 응용 프로그램 공급자 ( 예 : ado.net )는 전달 된 기본 형식을 기반으로 적절한 매개 변수화 된 쿼리를 만드는 메커니즘을 제공합니다. 다음은 SQL Server 저장소에 대해 ado.net 쿼리에 날짜 부분을 추가하는 예입니다. 문자열과 동일한 작업을 수행하는 것은 매우 번거롭고 깨지기 쉬운 / 오류가 발생하기 쉽습니다.
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
운영
코드의 기본 형식은 .net 형식과 같은 표준 작업을 제공합니다 System.Date
. 연산은 일반적으로 날짜를 추가하거나 날짜 간의 차이를 찾는 등 수학적 특성을 가지고 있습니다. 다시 말하지만 문자열 유형에서는 쉽게 수행 할 수 없습니다.
프리젠 테이션 레이어
장소
프리미티브 유형이 최종적으로 프리젠 테이션 레이어에서 문자열로 변환 될 때 ( 프로그램 스택의 올바른 위치 ) 프로그래머는 현재 상황에 따라 올바르게 표시 할 수있는 다양한 옵션을 갖습니다. 이 컨텍스트는 일반적으로 데이터의 실제 의미와 사용자의 로캘로 구성됩니다.
실시 예 1
날짜 / 시간 인스턴스는 사용자의 로캘을 기반으로 자동 서식을 지정할 수 있습니다.
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
실시 예 2
소수 인스턴스는 금액 (통화)을 나타낼 수 있으며 사용자의 로케일은 선호도에 따라 금액을 표시해야합니다. C # 응용 프로그램은 다음을 사용하여 값을 표시 할 수 있습니다.
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
다른 문화권에서는 숫자가 다르게 표시되므로 중요 할 수 있습니다. 미국 기간 (.)과 쉼표 (,)는 네덜란드에서와 같이 정확한 역의 의미를 갖습니다.
위치
이것은 DateTime
인스턴스에 따라 매우 다릅니다 . 날짜 및 시간은 특정 시점에서의 발생을 나타내지 만 일반적으로 자신의 시간대에 따라 사용자에게 전달 / 제공되어야합니다. 예 : 미국 동부 표준 시간대의 사용자 는 DateTime
인스턴스를 2016-09-21T23:38:21.399Z
표시 할 수 있습니다 9/21/2016 5:21 PM
. 이를 수행하는 방법에는 여러 가지가 있지만 날짜 시간 인스턴스가 메모리에 문자열 유형으로 또는 데이터 저장소에 문자열 유형으로 유지되는 경우 불가능 해집니다.
일반 규칙
프리미티브 유형을 문자열 표현으로 변환 할 때 적용되는 일반적인 2 가지 규칙은 다음과 같습니다.
- 입력을 수락 할 때 프로그램 스택에서 가능한 빨리 (일반적으로 프리젠 테이션 레이어에서) 해당 입력을 올바른 기본 유형으로 변환하십시오.
- 표시 할 데이터를 검색 할 때 프로그램 스택에서 가능한 한 늦게 (대개 프리젠 테이션 계층에서) 해당 데이터를 문자열 표현으로 변환하십시오.