Я уже некоторое время использую связывающие фреймворки, и я хотел бы знать, как вы справляетесь с этими случаями.
У вас есть газета, которая имеет некоторые атрибуты, такие как
- (Строка) заголовок
- (логическое) опубликовано
- (Дата) publishmentDate
На ваш взгляд, у вас есть список газет, которые можно редактировать всев то же время.Это означает, что вы можете изменить заголовки всех газет или всех их состояний, «опубликованных» в одном запросе.
Дело в том, что, поскольку мы используем обязательную основу, вы будете редактировать данные газет aнемного похоже на то, как если бы вы редактировали данные в БД ... привязывая каждое значение к полю независимо друг от друга.
Но ... что я хотел бы сделать, так это когда я публикую газету, publishmentDate обновляется до текущей даты.Я мог бы наверняка поместить поле publishmentDate в форму или даже скрытое поле, установленное на текущую дату ... Но это не чисто и не безопасно.
Я думаю, что лучше иметь действие publish ()это установит флаг в true, но также обновит publishmentDate (и другую логику, если необходимо ...)
Мне просто интересно, как вы справляетесь с этим?
Я видел и думал о разных подходах:
1) Иногда мы привязываем новые параметры к существующему постоянному объекту ORM. Это означает, что мы получаемобъект непосредственно перед привязкой, так что мы привязываем значения к существующему, «уже заполненному» объекту объекта.Иногда это называется «увлажнение объекта». Таким образом, единственный способ узнать, нужно ли вам запускать «действие публикации», - это сравнить старое поле с новым, чтобы вы знали, было ли оно отредактировано и в каком направлении (ложно-> true = publish) Можно использовать прослушиватель ORM (например, @PostLoad, перехватчик Hibernate / EventListener или что-то еще), так что вы можете сохранить нужные значения «перед связыванием».
Это хорошо работаетно довольно странно запускать действие публикации на транспортном средстве, в то время как привязка уже установила флаг публикации на true.
2) Можно сделать почти то же самое, ноиспользуйте другой флаг ... например, флаг, который представляет пользователя, желающего опубликовать газету. Таким образом, вам не нужно сравнивать с предыдущим значением, вы просто проверяете, хочет ли пользователь опубликовать газету, и затем запускаетедействие ... (и настоящий опубликованный флаг был все еще = false, когда вы запустили действие на этот раз ...)
Дело в том, чтоt так как вы используете связывающий фреймворк, вы хотите, чтобы в вашем представлении был установлен флажок для опубликованных газет.Поэтому, если атрибут для привязки теперь опубликован, вам нужно установить его значение, или все ваши флажки всегда будут сняты ... Это означает, что перед показом представления вам нужно будет сделать что-то вроде publ_wish = опубликованораз флаг желания не будет сохранен, но я видел некоторые случаи, когда «желание» ДОЛЖНО БЫТЬ сохранено, поэтому нет необходимости делать publ_wish = Опубликовал
3) Использовать пустойнепостоянный объект для привязки, затем скопируйте значения этого непостоянного объекта в реальный постоянный объект. Таким образом, когда вы копируете значения из одного объекта в другой, вы можете запустить любое действие, которое захотите, настроить все ..Но немного тяжело заново скопировать все эти параметры ...
Могут быть и другие способы сделать это ...
Как бы вы это сделали?Так что это не просто хорошо работает, но оно также элегантно, обслуживаемо ... я не вижу здесь идеального решения