java - Spring Boot Java 后端编码的硬编码通用?
问题描述
这是我在后端工作的第一天。我的背景是前端 Java 开发人员。我一直在看很多教程,我注意到在所有教程中,字符串文字都是硬编码的,并且没有类/方法/内联文档。这对于后端编码是否正常/可接受?
示例教程
https://www.jackrutorial.com/2018/04/spring-boot-user-registration-login.html
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”之类的字符串值(可以)被多次使用。最好创建常量以避免任何拼写错误并有一个参考点等。最终,我只是想了解后端开发的最佳实践是什么。如果这是前端代码,我的领导会撕毁我一个新的。
解决方案
这基本上只是可维护性问题。毕竟,编译期间的优化很可能可以处理这些文字,因此它们只创建一次,因此不会影响性能或内存使用。
对我来说,为不变的字符串使用常量一直是不费吹灰之力的,特别是如果它们在代码中多次使用。
如果我是你的主角并且看到了这个,我可能也会给你撕一个新的;)
推荐阅读
- html - Angular - 动态加载包含角度标记的 html
- elasticsearch - Elasticsearch 术语查询问题
- python - 在 Pyspark 中的多个列上过滤具有多个条件的 spark 数据框
- laravel - 获取指标图以在 vue 中显示图表
- javascript - 在固定列宽的 React Bootstrap 布局周围环绕文本
- python - 如何在不使用面向对象编程的情况下将画布对象的大小调整为 tkinter 中的窗口大小?
- ios - iOS 上的共享扩展无法打开我的 react-native 应用
- flutter - 带有过滤器搜索页面的颤振在返回页面时不断从查询中添加相同的列表视图
- html - R:将多个 html 小部件保存在一起
- php - 在laravel中通过id计算值