Refactor validation with return if statement

81 Views Asked by At

I have lots of method and on each method I have to do a validation. Currently, my code look like this and it works fine.

@Service
public class UserService {
    @Autowired
    private UserValidation userValidation;

    public BaseResponse<AuthenticationResponse> login(UserLoginRequest request) {
        List<ErrorCode> errors = userValidation.validateUserLoginRequest(request);
        if (!errors.isEmpty()) return Utils.constructFailedBaseResponse(errors);
        // ...
    }

    public BaseResponse<AuthenticationResponse> register(UserRegisterRequest request) {
        List<ErrorCode> errors = userValidation.validateUserRegisterRequest(request);
        if (!errors.isEmpty()) return Utils.constructFailedBaseResponse(errors);
        // ...
    }

    public BaseResponse<User> view(String username) {
        List<ErrorCode> errors = userValidation.validateUserUsernameExists(username);
        if (!errors.isEmpty()) return Utils.constructFailedBaseResponse(errors);
        // ...
    }

    public BaseResponse<Void> edit(UserEditRequest request) {
        List<ErrorCode> errors = userValidation.validateUserEditRequest(request);
        if (!errors.isEmpty()) return Utils.constructFailedBaseResponse(errors);
        // ...
    }
}

However, I'm curios is there a way to refactor the code so that I dont need to do the repetitive if statements on every method. The code below is what I'm trying to achiev, but I don't know how. Any idea how to convert the code above to the code below? Another solution to refactor is very welcome.

(Or should I just stick with my code above? why?)

@Service
public class UserService {
    @Autowired
    private UserValidation userValidation;

    public BaseResponse<AuthenticationResponse> login(UserLoginRequest request) {
        userValidation.validateUserLoginRequest(request);
        // ...
    }

    public BaseResponse<AuthenticationResponse> register(UserRegisterRequest request) {
        userValidation.validateUserRegisterRequest(request);
        // ...
    }

    public BaseResponse<User> view(String username) {
        userValidation.validateUserUsernameExists(username);
        // ...
    }

    public BaseResponse<Void> edit(UserEditRequest request) {
        userValidation.validateUserEditRequest(request);
        // ...
    }
}
0

There are 0 best solutions below