вторник, октября 16, 2018

Programmatic generation and runtime loading of EMF EPackages with ClassMaker

Сегодняшний пост - о, не совсем стандартном, использовании EMF, которое предлагает осуществлять автор, надеясь, что в каких-то случаях оно окажется оправданным.
Таковое заключается в том, чтобы программно запускать генератор EMF модели и загружать ее в собственную среду выполнения (runtime environment). API для доступа к сгенерированным экземплярам при этом, в точности совпадает с динамическим EMF, поступившим на вход в роли "чертежа" (blueprint).
В реализации автора библиотека ClassMaker полагается на возможности Eclipse Platform Resources для управления хранением модели в workspace-проектах и даже хранит историю в Git EMF Resource API непосредственно над ресурсами моделей.
По-умолчанию, применяются JET-based Ecore Generator, PDE Plug-in Exporter и Equinox OSGi Container, в качестве run-time environment. Вопросы наличия тех или иных кандидатов для замены остаются открытыми.

Суть технологии, заключающаяся в том, что случаи употребления класса DynamicEObjectImpl заменяются сгенерированными тут же классами по имени EClass#getName(), открывает новые возможности для пересмотра понятия Model-Driven Development. Это не совсем Models@run.time с его интеллектуальной автоматизацией адаптации программного обеспечения, но уже то, что позволяет поставить эти задачи если не перед искусственным интеллектом, то, хотя бы частично, перед пользователем.
Примером может служить ситуация более абстрактного приложения с введенным промежуточным слоем абстракции, промежуточным между техническим и пользовательским концептуальными уровнями понимания взаимодействия логики приложения, которое позволит клиенту запрограммировать манипуляции пользователя наиболее конкретными моделями-экземплярами, оставив программистам определение мета-модели.
В перспективе планируется создать DSL для определения текстового представления мета-модели с грамматикой парсинга ее ввода и шаблоном генерации ее вывода.

В связи с этим, одним из интересных применений ClassMaker может быть трансформация экземпляра мета-модели в класс для последующего инстанцирования в следующем слое конкретизации. Необходимая для этого трансформация QVT пока создается вручную, но в дальнейшем, это планируется автоматизировать, сделав частью DSL.
Мы надеемся, что у проекта много перспектив развития. В данный момент, идет работа над RCP-приложением, работающим с пользовательскими предметными областями и их объектами.













https://github.com/enterpriseDomain/ClassMaker


Проект open-source. Приглашаются со-основатели, единомышленники и пользователи.