Domanda

sto lavorando su un codice utilizzando il framework EMF in Java, ma è davvero difficile da usare, ad esempio, Non posso implementare OCL-like API interrogare cima EMF che sarebbe type-safe.

Una delle ragioni è che eGet() per EStructuralFeature restituisce solo un Object, non EObject. Quindi, qualsiasi cosa avrei scritto deve utilizzare gran parte del controllo nullo, il controllo di tipo e il tipo di getto, che è a rischio, non è performante e non può essere generalizzata in modo riutilizzabile.

Perché non EMF genera implementazioni fittizie con involucri EObject per il valore Object arbitrario?

Attuare il EObject e quindi le interfacce EClass anche con semplice UnsupportedOperationException tiro è davvero un dolore (le API sono troppo grandi). Lo stesso vale per il metodo eContainer() che rende la navigazione verso l'alto il modello dolorosa.

È stato utile?

Soluzione

Lo stesso metodo viene utilizzato per accedere semplici valori di attributo (che possono essere di qualsiasi tipo Java) e relazioni traslazione ad altri oggetti modellati, e questi possono essere singolo o multivalore.

EMF prevede meccanismi generici per verificare se un oggetto è un'istanza di un EClass, o se un EClass è assegnabile all'altro, quindi non davvero vedere il problema.

Altri suggerimenti

Il metodo eGet () è parte della API riflettente EMF. Come EMF può avvolgere qualsiasi oggetto serializzabile non è possibile limitare l'oggetto restituito di un'API quali riflettente.

Perché è necessario utilizzare questa API riflettente anziché l'implementazione Java generato del modello Ecore? In questo modo si avrà tutta la diretta API ben digitato per manipolare gli oggetti del dominio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top