Добавление поведения к моделям EMF
Мне интересно, как люди вообще справляются с добавлением поведения в модели ЭМП. У меня есть модель, представляющая определенный тип физического файла (файл проекта для IDE, но детали не интересны), и модель содержит некоторые вычисленные атрибуты (например, результат передачи этого файла внешним инструментам). Я вижу два пути решения этой проблемы: создание подклассов и редактирование сгенерированных классов моделей.
Я не столько заинтересован в решении этой конкретной проблемы (я могу сделать это несколькими способами), сколько в том, чтобы узнать, как другие пользователи EMF подходят к этой проблеме в целом.
2 ответа
У меня была такая же проблема, и я разговаривал с некоторыми модельными людьми и Эдом Мерксом.
Общий подход состоит в том, чтобы статически создавать все возможные типы и использовать их без изменений. Динамические модели (то есть модели EMF, которые изменяются во время выполнения) не очень распространены, поэтому нет достаточных знаний о том, как лучше всего их реализовать.
Некоторые проблемы, с которыми вы столкнетесь: Загрузка и сохранение классов вашей модели во время выполнения. Лучше убедиться, что классы модели имеют как минимум те же атрибуты при повторной загрузке модели.
Обычно это означает, что вы должны сохранить метамодель EMF вместе с самой моделью.
Что касается подклассов и редактирования: думайте об EMF как о подобном Reflection API. Это на самом деле просто API для описания классов Java, для создания экземпляров, для изменения этих экземпляров и сохранения.
Поэтому, если вам нужно решить, какой путь лучше, спросите себя, как бы вы решили это без EMF (т.е. в простой Java при использовании Reflection).
Мой ClassMaker позволяет это сделать. Вот пример.
И это, по крайней мере, создает основу для проверок, упомянутых в ответе Аарона.
UPD: Сегодня я реализовал эту проверку и не видел никаких трудностей. Что я делаю неправильно?