加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

腾讯事变近十年大佬:不是我冲击你!你也许真的不会写Java

发布时间:2019-07-02 01:44:01 所属栏目:建站 来源:程序员小姐
导读:文章焦点 着实,本不想把问题写的那么可怕,只是发明许多人干了几年 Java 往后,都自以为是一个不错的 Java 措施员了,可以拿着上万的人为都处鼓吹本身了,写这篇文章的目标并不是冷笑和我一样做 Java 的偕行们,只是但愿读者看到此篇文章后,可以和我一样

BeanUtils.copyProperties 是一个浅拷贝要领,复制属性时,我们只必要把 DTO 工具和要转化的工具两个的属性值配置为一样的名称,而且担保一样的范例就可以了。假如你在做 DTO 转化的时辰一向行使 set 举办属性赋值,那么请实行这种方法简化代码,让代码越发清楚!

转化的语义

上边的转化进程,读者看后必定认为优雅许多,可是我们再写 Java 代码时,更多的必要思量语义的操纵,再看上边的代码:

  1. User user = new User(); 
  2. BeanUtils.copyProperties(userInputDTO,user); 

固然这段代码很好的简化和优化了代码,可是他的语义是有题目的,我们必要提现一个转化进程才好,以是代码改成如下:

  1. @PostMapping 
  2.  public User addUser(UserInputDTO userInputDTO){ 
  3.  User user = convertFor(userInputDTO); 
  4.  return userService.addUser(user); 
  5.  } 
  6.  private User convertFor(UserInputDTO userInputDTO){ 
  7.  User user = new User(); 
  8.  BeanUtils.copyProperties(userInputDTO,user); 
  9.  return user; 
  10.  } 

这是一个更好的语义写法,固然他贫困了些,可是可读性大大增进了,在写代码时,我们应该只管把语义条理差不多的放到一个要领中,好比:

  1. User user = convertFor(userInputDTO); 
  2. return userService.addUser(user); 

这两段代码都没有袒露实现,都是在讲如安在统一个要领中,做一组沟通条理的语义操纵,而不是袒露详细的实现。

如上所述,是一种重构方法,读者可以参考 Martin Fowler 的《Refactoring Imporving the Design of Existing Code》(重构 改进既有代码的计划) 这本书中的 Extract Method 重构方法。

抽象接口界说

当现实事变中,完成了几个 API 的 DTO 转化时,我们会发明,这样的操纵有许多许多,那么应该界说好一个接口,让全部这样的操纵都有法则的举办。

假如接口被界说往后,那么 convertFor 这个要领的语义将发生变革,它将是一个实现类。

看一下抽象后的接口:

  1. public interface DTOConvert<S,T> { 
  2.  T convert(S s); 

固然这个接口很简朴,可是这里汇报我们一个工作,要去行使泛型,假如你是一个优越的 Java 措施员,请为你想做的抽象接口,做好泛型吧。

我们再来看接话柄现:

  1. public class UserInputDTOConvert implements DTOConvert { 
  2. @Override 
  3. public User convert(UserInputDTO userInputDTO) { 
  4. User user = new User(); 
  5. BeanUtils.copyProperties(userInputDTO,user); 
  6. return user; 

我们这样重构后,我们发明此刻的代码是云云的简捷,而且那么的类型:

  1. @RequestMapping("/v1/api/user") 
  2. @RestController 
  3. public class UserApi { 
  4.  @Autowired 
  5.  private UserService userService; 
  6.  @PostMapping 
  7.  public User addUser(UserInputDTO userInputDTO){ 
  8.  User user = new UserInputDTOConvert().convert(userInputDTO); 
  9.  return userService.addUser(user); 
  10.  } 

review code

假如你是一个优越的 Java 措施员,我信托你应该和我一样,已经数次一再 review 过本身的代码许多次了。

我们再看这个生涯用户的例子,你将发明,API 中返回值是有些题目的,题目就在于不该该直接返回 User 实体,由于假如这样的话,就袒露了太多实体相干的信息,这样的返回值是不安详的,以是我们更应该返回一个 DTO 工具,我们可称它为 UserOutputDTO:

  1. @PostMapping 
  2. public UserOutputDTO addUser(UserInputDTO userInputDTO){ 
  3.  User user = new UserInputDTOConvert().convert(userInputDTO); 
  4.  User saveUserResult = userService.addUser(user); 
  5.  UserOutputDTO result = new UserOutDTOConvert().convertToUser(saveUserResult); 
  6.  return result; 

这样你的 API 才更健全。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读