Patient這個Resource是FHIR應用中最常碰到的(另一個是Encounter)。他的結構夠複雜,可以涵蓋許多面向。
如圖中用紅框所示。一個是Choice Type,另一個是BackboneElement。
Choice要注意的是他可能會有不同的資料型態,而且要注意Tag名稱的變化。
BackboneElement他是繼承Element的類別。屬於此資料型態者,就表示會有自己專屬的Element。
而這兩個東西,是跟著所屬的Resource,不可共享。注意,有些地方名稱會一樣,但實際內容是不同的。(有規則就有例外,有部份BackboneElement是參考同一個Resource其他Path下的相同結構的BackboneElement,可參考ImplementationGuide的page)
在程式中這兩個傢伙就得小心處理。
原則上,欄位宣告這些都沒有特別差異。僅需注意紅框是為了Choice Type,而白框是為了BackboneElement。注意參照型態的類別名稱並不會影響JSON內容的判讀。
====Choice Type=====
他繼承了ChoiceType,要把自己的element name送給父類別,並且把可選擇的資料型態也定義好即可。(再強調一下,這些內容都是程式產生的)
=====BackboneElement=====
看到這,咦!不就是Complex Type嗎?對呀就是扣除Primity Type+Element那段亂流之外,其實所有結構都是對應到類別呀。為了共用程式碼所以繼承了BackboneElementType<T>,這類別就是繼承了BackboneElement。
所以,全劇終。(但~還是有陷阱)