Search⌘ K

Refactor the Edit User Implementation

Enhance the edit user implementation by refactoring.

Extracting fields

To avoid having to enter the user’s password when editing user details, we’ll do a small refactor. We’ll start by creating an abstract super class with CreateUserFormData extracting most fields except for password and passwordRepeated:

Java
package com.tamingthymeleaf.application.user.web;
import com.tamingthymeleaf.application.infrastructure.validation.ValidationGroupOne;
import com.tamingthymeleaf.application.infrastructure.validation.ValidationGroupTwo;
import com.tamingthymeleaf.application.user.Gender;
import com.tamingthymeleaf.application.user.UserRole;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.*;
import java.time.LocalDate;
@NotExistingUser(groups = ValidationGroupTwo.class)
public class AbstractUserFormData {
@NotNull
private UserRole userRole; //<.>
@NotBlank
@Size(min = 1, max = 200, groups = ValidationGroupOne.class)
private String firstName;
@NotBlank
@Size(min = 1, max = 200, groups = ValidationGroupOne.class)
private String lastName;
@NotNull
private Gender gender;
@NotBlank
@Email(groups = ValidationGroupOne.class)
private String email;
@NotNull
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday;
@NotBlank
@Pattern(regexp = "[0-9.\\-() x/+]+", groups = ValidationGroupOne.class)
private String phoneNumber;
public UserRole getUserRole() {
return userRole;
}
public void setUserRole(UserRole userRole) {
this.userRole = userRole;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Gender getGender() {
return gender;
}
public void setGender(Gender gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}

We’ll keep password and passwordRepeated fields on ...