Двунаправленные преобразования M2M с использованием Eclipse EMF
Я хотел бы сделать двунаправленные преобразования Model2Model. Обе модели основаны на EMF / eCore. На самом деле я бы предпочел, чтобы одна модель редактировалась другим.
Какие у меня варианты? Какие инструменты и языки преобразования доступны и каковы их ограничения?
4 ответа
Если вы настаиваете на выполнении двунаправленных преобразований M2M (так называемых Bxs), то знайте, что сообщество активных исследователей обновляет эту вики: http://bx-community.wikidot.com/. Если вы посетите его, то обнаружите, что в нем содержится список инструментов, подходящих для преобразований Bx http://bx-community.wikidot.com/relatedtools.
В прошлом я использовал ECHO, который обеспечивает реализацию QVT-R на основе решателя ограничений KodKod.
Это определенно стоит попробовать.
М2М самые тяжелые. Индустриальные силовые инструменты редки, много научных вещей. Если вы абсолютно незнакомы с языком M2M, обратите внимание на ATL, который также должен поддерживать ecore. В противном случае вы можете посмотреть на Xtend, который был создан для модели в текст, но вы можете злоупотреблять им, и он должен быть более удобным, чем обычная Java. Если вы в исследованиях, посмотрите на трансформации на основе Scala здесь
Для EMF больше инструментов трансформации, чем вы можете себе представить, это своего рода безумие...
Для преобразования метамодели в метамодель, где модели не очень похожи:
- ATL, пожалуй, самый популярный и самый "запеченный"
- Проект Epsilon имеет язык преобразования Epsilon.
Если метамодели очень похожи, и вам нужно только настроить некоторые вещи, то существуют инструменты, предназначенные для этого типа миграции / обновления:
- ATL теперь имеет режим уточнения
- Эпсилон имеет стадо
- Edapt также выглядит очень интересно, потому что метамодель / модель меняются вместе. Он позволяет вам работать в виде дерева и поставляется с заранее установленным набором правил.
- Henshin, который позволяет вам работать на диаграмме модели
- EMF Refactor - это подход на уровне кода, который также может как-то использовать правила Хеншина.
Вы всегда можете напрямую управлять метамоделью и моделью, используя также API-интерфейсы Java EMF.
Я добавлю, что если вы выполняете какую-либо настоящую работу с EMF, вам нужно получить и прочитать EMF: Eclipse Modeling Framework. Это доступно в Safari также. Я настоятельно рекомендую Safari: за 39 долларов в месяц вы получаете практически каждую книгу по разработке, которую когда-либо могли использовать.
Поскольку вы специально просили двунаправленные преобразования моделей, я должен сказать, что у вас нет вариантов. Чтобы сделать это более ясным, добавив к ответу, который вы получили от Ed Willink, ни один из существующих языков преобразования M2M (AFAIK) не поддерживает двунаправленные преобразования моделей. Работа над механизмом исполнения QVTr и QVTc начинает выглядеть многообещающе, если вы все еще заинтересованы в этом: QVTd Project.