2012-06-19 2 views
1

Если мне присвоен идентификатор, но у вас нет указаний на какой класс домена он принадлежит, как мне его загрузить?Как я могу эффективно найти экземпляр класса домена на основе идентификатора, если класс домена неизвестен?

Я мог бы тестировать get() по каждому классу домена в моем приложении по одному, но код будет трудно управлять и, скорее, неэффективен. Есть ли альтернативный метод?

ответ

2

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

К счастью, довольно легко удержать все классы домена в вашем приложении и перебрать их через application.domainClasses.

+0

Благодарим вас за указание 'application.domainClasses'. Это будет касаться ремонтопригодности решения. –

2

Да, есть только один способ: попробуйте получить() каждый домен, пока не найдете его.

Btw, разные домены могут иметь одинаковый идентификатор (зависит от конфигурации).

+1

Право. Я оставил это - я разделяю одну последовательность среди своих классов домена. –

0

Не зная о контексте, было бы труднее предложить что-то труднее. Если у вас есть доступ к экземпляру, возвращающему идентификатор, то, возможно, вы можете узнать класс, а затем использовать этот класс для получения get().

+0

Предпосылка моего вопроса заключается в том, что я понятия не имею о происхождении идентификатора. Я почти уверен, что любая контекстная информация, которую я предоставляю, привлечет внимание от моего конкретного вопроса. –

0

Вы можете добавить своего рода «метаданные» к своему id.

Например, скажем, у вас есть 2 класса домена: книга и автор. В базе данных вы создаете две последовательности идентификаторов для этих таблиц, одну в диапазоне 100000 - 199999 и вторую в диапазоне 200000-299999.

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

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