2024年10月27日 星期日

FHIR SDK(DotNet)- FHIR Type Framework - Primitive Type - 1

Primitive Type是一切神奇的開始, 是FHIR與程式語言交握之處,是一切基石。設計的核心在於能夠適應FHIR後續建構需求之發展,更需要能夠落實於程式語言之實做。

就其FHIR結構而言,是如此的單薄無力,但他卻承擔著20個Primitive Type的實做意義。


首先我們遭遇到的問題是FHIR資料型態的名稱就是跟程式語言的資料型態名稱相衝突。為了讓實做保持一致性,所以,上述20個資料型態的名稱全部加上了Fhir。(實際上是21個,因為Xhtml也屬於)


雖然有21個,其實就是分成字串類與數值類兩種。而真正的分法其實是JSON的Value部份要不要加引號的問題。也就是說,要從JSON角度出發,想想這21個資料型態應對應回程式語言什麼樣的資料型態。

另外,還要思考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>這個類別。




沒有留言:

張貼留言