首页 > 解决方案 > Spring Boot Java 后端编码的硬编码通用?

问题描述

这是我在后端工作的第一天。我的背景是前端 Java 开发人员。我一直在看很多教程,我注意到在所有教程中,字符串文字都是硬编码的,并且没有类/方法/内联文档。这对于后端编码是否正常/可接受?

示例教程

  1. https://www.jackrutorial.com/2018/04/spring-boot-user-registration-login.html

  2. https://medium.com/@kamer.dev/spring-boot-user-registration-and-login-43a33ea19745

在基于 Java 的前端项目中,我永远不会硬编码任何值。举这个例子,

package com.jackrutorial.controller;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.jackrutorial.model.User;
import com.jackrutorial.service.UserService;

@Controller
public class UserController {

 @Autowired
 private UserService userService;
 
 @RequestMapping(value= {"/", "/login"}, method=RequestMethod.GET)
 public ModelAndView login() {
  ModelAndView model = new ModelAndView();
  
  model.setViewName("user/login");
  return model;
 }
 
 @RequestMapping(value= {"/signup"}, method=RequestMethod.GET)
 public ModelAndView signup() {
  ModelAndView model = new ModelAndView();
  User user = new User();
  model.addObject("user", user);
  model.setViewName("user/signup");
  
  return model;
 }
 
 @RequestMapping(value= {"/signup"}, method=RequestMethod.POST)
 public ModelAndView createUser(@Valid User user, BindingResult bindingResult) {
  ModelAndView model = new ModelAndView();
  User userExists = userService.findUserByEmail(user.getEmail());
  
  if(userExists != null) {
   bindingResult.rejectValue("email", "error.user", "This email already exists!");
  }
  if(bindingResult.hasErrors()) {
   model.setViewName("user/signup");
  } else {
   userService.saveUser(user);
   model.addObject("msg", "User has been registered successfully!");
   model.addObject("user", new User());
   model.setViewName("user/signup");
  }
  
  return model;
 }
 
 @RequestMapping(value= {"/home/home"}, method=RequestMethod.GET)
 public ModelAndView home() {
  ModelAndView model = new ModelAndView();
  Authentication auth = SecurityContextHolder.getContext().getAuthentication();
  User user = userService.findUserByEmail(auth.getName());
  
  model.addObject("userName", user.getFirstname() + " " + user.getLastname());
  model.setViewName("home/home");
  return model;
 }
 
 @RequestMapping(value= {"/access_denied"}, method=RequestMethod.GET)
 public ModelAndView accessDenied() {
  ModelAndView model = new ModelAndView();
  model.setViewName("errors/access_denied");
  return model;
 }
}

诸如“user/signup”或“errors/access_denied”之类的字符串值(可以)被多次使用。最好创建常量以避免任何拼写错误并有一个参考点等。最终,我只是想了解后端开发的最佳实践是什么。如果这是前端代码,我的领导会撕毁我一个新的。

标签: javaspringspring-boot

解决方案


这基本上只是可​​维护性问题。毕竟,编译期间的优化很可能可以处理这些文字,因此它们只创建一次,因此不会影响性能或内存使用。

对我来说,为不变的字符串使用常量一直是不费吹灰之力的,特别是如果它们在代码中多次使用。

如果我是你的主角并且看到了这个,我可能也会给你撕一个新的;)


推荐阅读