Предположим, в Java Google App Engine (GAE / J) я использую com.google.appengine.api.users.UserService, чтобы получить объект User для текущего пользователя.
Я хочу отправить информацию об этом пользователе клиенту; однако, поскольку я использую Google Web Toolkit (GWT), мне нужен объект, который я могу сериализовать, и пользователь не является одним из них, поскольку он принадлежит пакету сервера.
Поэтому я создаю новый класс в своем общем каталоге GWT, который называется, скажем, UserStuff, и я копирую поля User в экземпляр UserStuff и отправляю его клиенту.
Позже клиент отправляет мне объект UserStuff, и я хочу присоединить пользователя как свойство сущности. Единственный способ сделать объект User, который я могу найти, - это вызвать конструктор для самого пользователя; то есть ничто в API UserService не получит полностью сформированный объект User для меня, скажем, от идентификатора пользователя (полученного из User.getUserId ()) https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/users/UserService
Итак, я создаю объект User, используя конструктор для User. Ни один из этих конструкторов не позволяет мне устанавливать поле псевдонима для пользователя, и нет способа сделать это! https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/users/User
Теперь я могу вместо этого отправить клиенту токен обратно с надписью «получить текущего пользователя и использовать его», но это неуклюже. Кроме того, это еще более проблематично, если у меня есть сущности, к которым подключено несколько пользователей, и я хочу отправить их клиенту, а клиент должен отправить мне еще несколько объектов для помещения в хранилище данных, к которому должны присоединиться другие пользователи. .
Один из способов сделать это - просто создать сущность UserStuff для каждого пользователя, а когда я получу пользователя в качестве текущего пользователя, зарегистрировать пользователя как поле в объекте UserStuff этого пользователя вместе с идентификатором пользователя! User. Затем, когда мне нужен объект User для идентификатора пользователя, я могу получить объект UserStuff для этого идентификатора пользователя, а затем получить объект User пользователя как свойство объекта UserStuff. Или я мог бы просто поставить псевдоним на объекте UserStuff. Однако это большой трафик хранилища данных только потому, что я не могу установить псевдоним для объекта User.