Как вы переносите объект данных с клиента на сервер для сохранения данных с помощью GWT? - PullRequest
4 голосов
/ 19 августа 2011

Если вы используете JPA или другой тип персистентности, у вас, вероятно, есть способ сохранить запись, которая отправляется клиенту через ajax.

РЕДАКТИРОВАТЬ: интерфейс выполняется с GWT, поэтому всеВызов ajax - это классический java-метод (преобразованный в эквивалент javascript)

Давайте возьмем класс Person, который является сущностью в базе данных.Person имеет четыре поля: name, birthday, id, email

Когда вы загружаете человека с сервера через ajax, вы обычно отправляете клиенту объект Person.

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

Существует два случая:

  • сохранить персону: можно изменить только электронную почту, но вы можете отобразить идентификатор
  • создать человека: электронную почту, имя и день рождения можно изменить

Когда вы отправляете только что отредактированные данные на сервер, как вы поступаете?

Я вижу несколько подходов:

  • отправить объект Person.В этом случае вы должны позаботиться о сохраняемых вами данных, а не только переводить объект person, полученный вами от клиента, в постоянный режим, поскольку хакер может отправлять данные, которые вы, возможно, не хотите изменять (и вы не можете доверять интерфейсу, чтобы отключитьизменения).В этом случае также существует несколько подходов:
    • использовать две функции (сохранить и создать), создать новый объект Person на сервере (или загрузить постоянный экземпляр с помощью идентификатора, если вы используете метод save) ископируйте все поля, которые вы хотите, из объекта Person клиента в постоянный
    • , используйте одну функцию (saveOrCreate) и проверьте, существует ли id.Это эквивалентно приведенному выше подходу, объединяя две функции в одну с большим «если»
  • отправка данных на сервер (электронная почта, день рождения, имя, идентификатор (в случае редактирования))).Когда вы сделаете это, создайте новый объект Person (или загрузите сохраненный объект) и скопируйте данные в этот сохраненный экземпляр.

Подводя итоги, вы получаете одну из следующих сигнатур метода (только для случая редактирования):

  • Person savePerson(Person person);
  • Person savePerson(String id, String email);

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

Я не знаю, какой из них лучший, и если вы знаете другой способ сделать это.Итак, как поживаете?

1 Ответ

1 голос
/ 20 августа 2011

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

Однако некоторые люди просят отделить сущности домена персистентности от бизнес-домена. В таких случаях может использоваться копирование свойств (утилиты apache commons-bean).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...