2024年10月27日 星期日

FHIR SDK(DotNet)- FHIR Type Framework - Complex Type - 2

雖然Complex Type有很多,但他們的行為模式都是一樣,設計一個父類別來處理。等等,不是有最討厭的Element嗎?這邊可以放心,因為Complex對應回JSON就是一個物件結構,id與extension就如同其他欄位一樣的自然存在。


宣告ComplexType<T>,用到泛型,T就是哪些有宣告欄位的Complex Type們。建構元也很簡單,就是把傳進來的值進行解析,然後去更新所有的欄位內容值。在此是呼叫SetupPropertyValue()這個函數。(有點複雜,容後說明)


接著複寫來自DataType的函數。應該可以理解,目前IsCompelx()就得設成true了。另外,取得JsonString的部份,用了C# Extension Method機制,將JsonNode,多了產生JSON String 的方法。(為何多此一舉?唉~那就要問微軟了,他的DotNet的問題)


再來實做來自IComplexType的介面要求,而且是非常重要的函數服務GetJsonObject()。因為SDK其實是用Key-Value來存放JSON內容。Value的部份實際上是用JsonNode。身為Complex Type他一定是在Value這端,所以,這個函數很重要。把Key-Value轉成JsonNode出來。

因為Complex的欄位,也有可能是JsonValue、JsonObject或JsonArray,還好他們有共同父類別是JsonNode。只是要注意,這套程式庫,會咬死Json Path,不能輕易把一段JSON掛到某一個Element上,所以要用DeepClone()這個方法,來取得乾淨的JsonNode結構。

另外,還有一種情境,這個Complex是用new() {}然後設值的方式建構的,也就是說沒有經過建構元,那就不會建立啟始的_Properties內容,此時,就得透過SetupJsonObject()方式,來取得各欄位內容值,再轉換成JsonNode。

==========

SetupPropertyValue()是支援建構元,將JsonNode資料轉換成Complex 物件。

SetupJsonObject()是將Complex物件的內容轉換成JsonNode。

這兩個東西是整個SDK第二困難與複雜的點。就留待下篇來說明。

沒有留言:

張貼留言