TL; DR 측정 단위 내에서 단위를 정의하기위한 최적의 데이터 구조를 설계하려고합니다.
A Unit of measure
는 본질적 value
으로unit
입니다. SI 단위 에는 7 개의베이스 또는 치수가 있습니다. 즉, 길이, 질량, 시간, 전류, 온도, 물질의 양 (몰) 및 광도.
이것은 간단하지만 많은 파생 단위와 자주 사용하는 요금이 있습니다. 결합 된 단위의 예는 다음과 같습니다.kg * m / s^2
이고 비율의 예는입니다 tons / hr
.
묵시적 유닛에 크게 의존하는 응용 프로그램이 있습니다. 변수 또는 열 이름에 단위를 포함시킵니다. 그러나 다른 단위로 측정 단위를 지정해야 할 때 문제가 발생합니다. 예, 입력 및 표시시 값을 변환 할 수 있지만 이로 인해 자체 클래스 내에서 캡슐화하려는 많은 오버 헤드 코드가 생성됩니다.
코드 플렉스 및 기타 공동 작업 환경에는 여러 가지 솔루션이 있습니다. 프로젝트 라이센스는 합리적이지만 프로젝트 자체는 대개 너무 가볍거나 무겁습니다. 우리는 "바로"유니콘을 쫓고 있습니다.
이상적으로는 다음과 같이 새 측정 단위를 정의 할 수 있습니다.
UOM myUom1 = 새로운 UOM (10, 볼트);
UOM myUom2 = 새로운 UOM (43.2, 뉴턴);
물론 고객의 요구에 따라 Imperial과 SI를 혼합하여 사용합니다.
또한이 단위 구조를 향후 데이터베이스 테이블과 동기화하여 데이터 내에서 동일한 수준의 일관성을 제공 할 수 있어야합니다.
측정 단위 클래스를 만드는 데 사용해야하는 단위, 파생 단위 및 비율을 정의하는 가장 좋은 방법은 무엇입니까? 하나 이상의 열거 형을 사용하는 것을 볼 수 있지만 다른 개발자에게는 실망 할 수 있습니다. 단일 열거 형은 200 개 이상의 항목으로 구성되는 반면, 여러 대의 열거 형은 SI 대 영국식 단위를 기반으로 혼동 될 수 있고 단위 자체의 분류를 기반으로 한 추가 분류가 혼동 될 수 있습니다.
내 관심사 중 일부를 보여주는 열거 형 예 :
myUnits.Volt
myUnits.Newton
myUnits.meterSIUnit.meter
ImpUnit.foot DrvdUnit.Newton
DrvdUnitSI.Newton
DrvdUnitImp.FtLbs
사용중인 단위는 꽤 잘 정의되어 있으며 유한 공간입니다. 고객이 요구할 때 새로운 파생 단위 나 요율을 확장하고 추가 할 수있는 기능이 필요합니다. 더 넓은 디자인 측면이 여러 언어에 적용 가능하다고 생각하지만 프로젝트는 C #입니다.
내가 본 라이브러리 중 하나는 문자열을 통해 단위의 자유 형식 입력을 허용합니다. 그런 다음 UOM 클래스는 문자열을 구문 분석하고 그에 따라 슬롯을 지정했습니다. 이 접근 방식의 문제점은 개발자가 올바른 문자열 형식을 생각하고 기억해야한다는 것입니다. 그리고 생성자에서 전달되는 문자열의 유효성을 검사하기 위해 코드 내에 추가 검사를 추가하지 않으면 런타임 오류 / 예외가 발생할 위험이 있습니다.
다른 라이브러리는 본질적으로 개발자가 작업해야 할 클래스를 너무 많이 만들었습니다. 동등한 UOM와 함께 그것은 제공 DerivedUnit
및 RateUnit
등등. 본질적으로 코드는 우리가 해결하는 문제에 대해 지나치게 복잡했습니다. 이 라이브러리는 본질적으로 모든 조합을 허용하지만 (단위 세계에서 합법적 인) 모든 조합을 허용하지 않아 문제의 범위를 좁 힙니다 (코드 단순화).
다른 라이브러리는 엄청나게 간단했으며 예를 들어 연산자 오버로드를 고려하지 않았습니다.
또한 잘못된 변환 (예 : 볼트-미터) 시도에 대해 걱정하지 않습니다. 이 시점에서이 레벨에서 액세스 할 수있는 것은 개발자뿐입니다. 따라서 이러한 유형의 실수로부터 보호 할 필요는 없습니다.