Attribute和Reference是模型中的其中兩大元素,通常我們查詢都會根據Attribute和Reference來查詢。EMF-Query中提供了針對這兩種元素的封裝了條件類哦,怎么使用?easy~~
接觸了eclipse那么久,對eclipse所說的feature的理解感覺還是有點模糊,僅僅就是我們理解成的“功能部件”嗎?很懷疑,還得仔細查查資料。要是有哪位兄臺能在這里給我指點一下就好了,呵呵。Feature Conditions是有關features of model elements的(不知如何翻譯這個詞才恰當,保留它吧)。給我自己的感覺,在EMF中,“features of model elements”的feature包含的模型元素的Attribute和Reference,或許Containment也算。看看結構圖來分析:
EObjectStructuralFeatureCondition關聯了一個EStructuralFeature,主要用來判斷模型元素feature 是否有效(模型元素的 EClass 是否具有feature)。
EObjectReferencerCondition用于選取元素所有引用到的對象,并且不考慮contaiment(或container features )。
看看一個例子,列出商品中所有關于食品類food的產品product:
再看看下面的結構圖(用于Feature Values 的條件):
EObjectStructuralFeatureValueCondition 使得斷言在查詢對象的features的值變得非常方便。它既支持EAttributes又支持EReferences。取feature值是通過IEStructuralFeatureValueGetter的對象獲取structural features.的,大多數時候,你可以使用默認的FeatureValueGetter,默認的FeatureValueGetter是這樣一個對象:EStructuralFeatureValueGetter.getInstance()
EObjectCondition是支持復合操作和策略使用的,作為子類的EObjectStructuralFeatureValueCondition 當然也不會例外。
EObjectReferenceValueCondition和EObjectAttributeValueConditions十分相似(使用角度),看它們的名稱就很容易猜到它們之間的各自的服務對象了,前者是針對Reference的,后者是針對Attribute的。看完下面的例子,就完全可以體會到它們基本的用法了。
下一節,將介紹查詢的執行,也就是通過SELECT Statement來查詢對象。