Каков наилучший способ автоматической генерации значений для объектов при создании EObject? - PullRequest
1 голос
/ 25 июня 2011

У меня есть некоторые атрибуты в моих EClasses, которые я хотел бы инициализировать вычисленным значением при создании экземпляра. Мне интересно, каков рекомендуемый способ сделать это с помощью фреймворка.

В одном случае я хотел бы инициализировать атрибут id для UUID. В этом случае я бы хотел, чтобы значение UUID присваивалось при первом создании объекта, а затем оставалось неизменным на протяжении всего срока службы объекта.

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

Я новичок в EMF и буду очень признателен за любые рекомендации.

1 Ответ

1 голос
/ 25 июня 2011

В обоих случаях я обычно делаю атрибуты suppress Setter и инициализирую их в конструкторе по умолчанию.

  • UUID генерируется через EcoreUtils.generateUUID()
  • уникальный идентификатор класса генерируется из класса static nextID

Атрибуты не сделаны unchangeable, поскольку мы должны (обычно) иметь возможность загружать XML-файл, и они должны иметь приоритет над теми, которые установлены в конструкторах.

Уникальный идентификатор класса немного сложнее обрабатывать, так как мы также должны инициализировать nextID хорошим значением при запуске приложения.

Рассмотрим последовательность, в которой мы сначала создаем несколько объектов, а затем загружаем старый файл: как мы можем убедиться, что между объектами нет дубликатов? Один из возможных способов - разделить идентификатор на две части: временную метку и порядковый номер. Предполагая, что мы не можем перезапустить приложение в пределах разрешения метки времени (обычно одна секунда), это работает довольно хорошо.

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

В общем, я обычно придерживаюсь UUID, поскольку этот метод позволяет избежать всех вышеперечисленных проблем: -)

...