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

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

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

不知道在看完这段代码之后,读者有是否发明尚有其他题目的存在,作为一个优越的 Java 措施员,请看一下这段我们方才抽象完的代码:

  1. User user = new UserInputDTOConvert().convert(userInputDTO); 

你会发明,new 这样一个 DTO 转化工具是没有须要的,并且每一个转化工具都是由在碰着 DTO 转化的时辰才会呈现,那我们应该思量一下,是否可以将这个类和 DTO 举办聚合呢,看一下我的聚合功效:

  1. public class UserInputDTO { 
  2. private String username; 
  3. private int age; 
  4.  public String getUsername() { 
  5.  return username; 
  6.  } 
  7.  public void setUsername(String username) { 
  8.  this.username = username; 
  9.  } 
  10.  public int getAge() { 
  11.  return age; 
  12.  } 
  13.  public void setAge(int age) { 
  14.  this.age = age; 
  15.  } 
  16.  public User convertToUser(){ 
  17.  UserInputDTOConvert userInputDTOConvert = new UserInputDTOConvert(); 
  18.  User convert = userInputDTOConvert.convert(this); 
  19.  return convert; 
  20.  } 
  21.  private static class UserInputDTOConvert implements DTOConvert<UserInputDTO,User> { 
  22.  @Override 
  23.  public User convert(UserInputDTO userInputDTO) { 
  24.  User user = new User(); 
  25.  BeanUtils.copyProperties(userInputDTO,user); 
  26.  return user; 
  27.  } 
  28.  } 

然后 API 中的转化则由:

  1. User user = new UserInputDTOConvert().convert(userInputDTO); 
  2. User saveUserResult = userService.addUser(user); 

酿成了:

  1. User user = userInputDTO.convertToUser(); 
  2. User saveUserResult = userService.addUser(user); 

我们再 DTO 工具中添加了转化的举动,我信托这样的操纵可以让代码的可读性变得更强,而且是切合语义的。

再查器材类

再来看 DTO 内部转化的代码,它实现了我们本身界说的 DTOConvert 接口,可是这样真的就没有题目,不必要再思索了吗?

我认为并不是,对付 Convert 这种转化语义来讲,许多器材类中都有这样的界说,这中 Convert 并不是营业级别上的接口界说,它只是用于平凡 bean 之间转化属性值的平凡意义上的接口界说,以是我们应该更多的去读其他含有 Convert 转化语义的代码。

我细心阅读了一下 GUAVA 的源码,发明白 com.google.common.base.Convert 这样的界说:

  1. public abstract class Converter<A, B> implements Function<A, B> { 
  2.  protected abstract B doForward(A a); 
  3.  protected abstract A doBackward(B b); 
  4.  //其他略 

从源码可以相识到,GUAVA 中的 Convert 可以完成正向转化和逆向转化,继承修改我们 DTO 中转化的这段代码:

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

修改后:

  1. private static class UserInputDTOConvert extends Converter<UserInputDTO, User> { 
  2.  @Override 
  3.  protected User doForward(UserInputDTO userInputDTO) { 
  4.  User user = new User(); 
  5.  BeanUtils.copyProperties(userInputDTO,user); 
  6.  return user; 
  7.  } 
  8.  @Override 
  9.  protected UserInputDTO doBackward(User user) { 
  10.  UserInputDTO userInputDTO = new UserInputDTO(); 
  11.  BeanUtils.copyProperties(user,userInputDTO); 
  12.  return userInputDTO; 
  13.  } 
  14.  } 

(编辑:湖南网)

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

热点阅读