как сгенерировать код из графической модели в конкретный API?

я создаю редактор для управления графическими элементами, каждый элемент должен представлять тип элемента в спецификации API.

Элементы API в основном представляют собой интерфейсы некоторых классов, они имеют определенные ограничения использования, например, элемент A не может быть дочерним элементом элемента B или не может быть связан с элементом C и т. д.

Редактор должен позволять вам генерировать код в соответствии с тем, что вы нарисовали, и сгенерированный код должен быть реализацией API, который соответствует тому, что вы нарисовали.

я ничего не знаю (на практике) об архитектуре, управляемой моделью, и о том, как я могу генерировать код из графической модели для некоторой реализации.

я не хочу смешивать графическую модель (содержащую графическую информацию, такую ​​как размер и координаты и т. д.) с бизнес-моделью, реализующей спецификацию API.

Я использую eclipse GEF для создания редактора, вот проблемы, с которыми я сталкиваюсь:

Поскольку графическая модель и бизнес-модель разделены, я думал об определении модели ЭДС, редактор будет редактором для этой модели ЭДС. Можно ли тогда преобразовать модель, нарисованную в редакторе, используя модель emf в качестве основных элементов конструкции, в соответствующую реализацию спецификации API?

я знаю, поскольку графическая модель и бизнес-модель разделены, я должен реализовать какой-то грамматик, разделяющий ограничения использования: antlr хорошо подходит для того, что я хочу сделать (говоря о генерации кода и грамматике), или мне следует использовать xtext?

какой инструмент eclipse framework поможет мне делать то, что я хочу?


person user1125516    schedule 15.04.2013    source источник


Ответы (1)


Если у вас уже есть графический редактор, то создание формата текстовой модели более низкого уровня (например, с использованием antlr/Xtext) для выполнения генерации кода представляется ненужным. Особенно, если ваша модель уже находится в EMF.

Существуют различные технологии генерации кода для модели EMF (например, для этого также можно использовать Acceleo или Xtend); эти генераторы будут использовать модель EMF в качестве входных данных и предоставлять выходной код, специфичный для используемого вами API. В обоих инструментах вы должны вручную собрать выходные файлы, определив шаблоны, а затем сериализовать результаты этих шаблонов. Эта сериализация выполняется автоматически в Acceleo, или вы можете сделать это с помощью Java-подобного API в Xtend.

Если ваша модель сейчас не в EMF, вы все еще можете использовать Xtend напрямую, однако, я считаю, что Acceleo в этом случае бесполезен.

person Zoltán Ujhelyi    schedule 15.04.2013
comment
спасибо, ваш ответ очень полезен - person user1125516; 15.04.2013