Primitive Type是一切神奇的開始, 是FHIR與程式語言交握之處,是一切基石。設計的核心在於能夠適應FHIR後續建構需求之發展,更需要能夠落實於程式語言之實做。
就其FHIR結構而言,是如此的單薄無力,但他卻承擔著20個Primitive Type的實做意義。
另外,還要思考Null值的Value要怎麼辦。所以,另外設計的一系列Inteface來要求此21個資料型態是怎麼對應回程式語言的資料型態。
舉個FhirString這個Primitive Type為例,他需要實做IStringValue,而實際上他的Value值是對應回程式語言的string。
FhirString也繼承了PrimitiveType<T1, T2>,這個應用到泛型,也就是把這21個資料型態共通性的實做放到了父類別,並且告知FHIR資料型態與對應的程式型態。這個父類別就留待下一篇說明。
另外再舉一個FhirInteger為例,他需要實做IInteger32Value,他是對應為程式語言的int資料型態。一樣繼承PrimitiveType<FhirInteger, int>。
因為C#的string有支援null而int沒有,所以,這邊有多一個HasValue屬性。這是來自IInteger32Value的介面要求。
建構式的部份除了接收JsonNode的之外,都一定會接收string。再來就是接收對應於程式語言的資料型態。
至於討人厭的Element,為避免破壞Primitive的單純性,將其拉出單獨處理之。
再者是驗證,這是依據FHIR官方文件所提供的Regex。
另外要提供的事GetJsonValue()函數,注意Primitive不要理會Element的話,在JSON的角度,他就是Key-value,而這個value的就是一個純數。那有Element怎麼辦。根據官方文件,這個key的名稱,會多一個"_",這也是我設計決策上,要把他獨立的原因。
其實這21個Primitive Type,沒有什麼,真正的神奇魔法是在PrimitiveType<T1, T2>這個類別。
沒有留言:
張貼留言