В обоих случаях я обычно делаю атрибуты suppress Setter
и инициализирую их в конструкторе по умолчанию.
- UUID генерируется через
EcoreUtils.generateUUID()
- уникальный идентификатор класса генерируется из класса static
nextID
Атрибуты не сделаны unchangeable
, поскольку мы должны (обычно) иметь возможность загружать XML-файл, и они должны иметь приоритет над теми, которые установлены в конструкторах.
Уникальный идентификатор класса немного сложнее обрабатывать, так как мы также должны инициализировать nextID
хорошим значением при запуске приложения.
Рассмотрим последовательность, в которой мы сначала создаем несколько объектов, а затем загружаем старый файл: как мы можем убедиться, что между объектами нет дубликатов? Один из возможных способов - разделить идентификатор на две части: временную метку и порядковый номер. Предполагая, что мы не можем перезапустить приложение в пределах разрешения метки времени (обычно одна секунда), это работает довольно хорошо.
В этом решении все еще предполагается, что нам никогда не нужно загружать два или более старых файла, поскольку они могут конфликтовать, если они создаются одновременно в разных экземплярах приложения ...
В общем, я обычно придерживаюсь UUID, поскольку этот метод позволяет избежать всех вышеперечисленных проблем: -)