Ситуация
Имам приложение Eclipse RCP, което управлява проекти на приложения в рамките на EMF модел.
Тези проекти се записват чрез сериализирането им във формат XMI. След това такива файлове могат да бъдат заредени обратно в модела. Използвам стандартните EMF инструменти (като Resource) за това.
Поради рефакторинг на модела, следното се промени:
- Old model
- EClass
MyClass
with an attributeName
(with capital letter). - XMI:
<MyClass Name="My Class Name 1" ... />
- EClass
vs.
- New model
- EClass
MyClass
inherits fromMyBaseClass
, with attributename
(without capital letter). - EClass
MyClass
вече няма атрибутName
, тъй като EMF не позволява и двете. Това има смисъл, тъй като ще се сблъска напр. методът getergetName()
.
- EClass
Проблем
Как мога да заредя стар XMI проектен файл в моя нов модел?
До този проблем успях или да:
- избягвайте модифициране на модела
- разрастване на модела, за да съдържа както старите, така и новите структури и извършване на модификация след зареждане на файла на проекта: преместване на информация от стари към нови типове, актуализиране на препратки,....
В този случай обаче не мога да заредя XMI файла на първо място: моделът пропуска атрибут name
от една страна и не разпознава (и следователно игнорира) атрибут Name
от друга.
Въпрос
Кое е правилното място за прилагане на тази поддръжка за обратна съвместимост?
Предполагам, че трябва да работя върху процеса на десериализация или XML картографирането.
Ограниченията за решението са:
- Новите проекти (съдържащи
<MyClass name="..." ... />
) също трябва да се зареждат правилно. - Записването (т.е. сериализирането) на проектен модел трябва винаги да се случва в новия формат!