Resource系列雖然可視為Complex Type,但仍須獨立視之,否則到處都是地雷。在其他的Resource,例如Bundle,其元素entry/resource的資料型態就是Resource。但Resource是抽象型態(Abstract Class),在C#中是不能產生實例。這塊就是得想辦法克服之處。
Resource直接繼承了Base,其所含的元素,乍看之下沒有什麼特殊性。比較麻煩的是meta,他的資料型態是Meta。Meta繼承DataType,所以,他沒有Extension機制。那Extension機制呢?哈~怎麼可能遺漏呢?原來是放在了DomainResource,而且一次給妳兩個,extension與modifierExtension。(這兩者差異不在本系列範疇)。contained的資料型態是Resource,是他的父類別。這個問題不大,這個類別沒有特別要處理的。
至於其子類別CanonicalResource與在下一個子類別MetadataResource,這兩個定義是介面,表示某些類別需要實做這兩個。例如ActiveDefinition在其結構描述中就有指定要實做MetadataResource。在這兩個介面描述就會說明實做資源相對應條件要求。這塊SDK並沒有實做。
===============
Resource類別的設計與Complex Type類似,只是OnPropertyChange與SetupPropertyValue需要另外處理。(因為Resource直接繼承了base,而這些功能不能寫在Base,因為Datatype那邊有個Element,處理方式略有不同。)
DomainResource更簡單,就是單純的ComplexType。
之前也說過,Resource 是抽象類別,無法直接產生實例。所以,透過可實做類別來實現之。多一個ResourceType類別,硬是把所有Resource都變成Complex Type一樣的操作方式。
沒有留言:
張貼留言