Если вы используете 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.Но это менее читабельно, чем второй подход, чтобы узнать, что действительно спасено.
Я не знаю, какой из них лучший, и если вы знаете другой способ сделать это.Итак, как поживаете?