不知道在看完这段代码之后,读者有是否发明尚有其他题目的存在,作为一个优越的 Java 措施员,请看一下这段我们方才抽象完的代码:
- User user = new UserInputDTOConvert().convert(userInputDTO);
你会发明,new 这样一个 DTO 转化工具是没有须要的,并且每一个转化工具都是由在碰着 DTO 转化的时辰才会呈现,那我们应该思量一下,是否可以将这个类和 DTO 举办聚合呢,看一下我的聚合功效:
- public class UserInputDTO {
- private String username;
- private int age;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public User convertToUser(){
- UserInputDTOConvert userInputDTOConvert = new UserInputDTOConvert();
- User convert = userInputDTOConvert.convert(this);
- return convert;
- }
- private static class UserInputDTOConvert implements DTOConvert<UserInputDTO,User> {
- @Override
- public User convert(UserInputDTO userInputDTO) {
- User user = new User();
- BeanUtils.copyProperties(userInputDTO,user);
- return user;
- }
- }
- }
然后 API 中的转化则由:
- User user = new UserInputDTOConvert().convert(userInputDTO);
- User saveUserResult = userService.addUser(user);
酿成了:
- User user = userInputDTO.convertToUser();
- User saveUserResult = userService.addUser(user);
我们再 DTO 工具中添加了转化的举动,我信托这样的操纵可以让代码的可读性变得更强,而且是切合语义的。
再查器材类
再来看 DTO 内部转化的代码,它实现了我们本身界说的 DTOConvert 接口,可是这样真的就没有题目,不必要再思索了吗?
我认为并不是,对付 Convert 这种转化语义来讲,许多器材类中都有这样的界说,这中 Convert 并不是营业级别上的接口界说,它只是用于平凡 bean 之间转化属性值的平凡意义上的接口界说,以是我们应该更多的去读其他含有 Convert 转化语义的代码。
我细心阅读了一下 GUAVA 的源码,发明白 com.google.common.base.Convert 这样的界说:
- public abstract class Converter<A, B> implements Function<A, B> {
- protected abstract B doForward(A a);
- protected abstract A doBackward(B b);
- //其他略
- }
从源码可以相识到,GUAVA 中的 Convert 可以完成正向转化和逆向转化,继承修改我们 DTO 中转化的这段代码:
- private static class UserInputDTOConvert implements DTOConvert<UserInputDTO,User> {
- @Override
- public User convert(UserInputDTO userInputDTO) {
- User user = new User();
- BeanUtils.copyProperties(userInputDTO,user);
- return user;
- }
- }
修改后:
- private static class UserInputDTOConvert extends Converter<UserInputDTO, User> {
- @Override
- protected User doForward(UserInputDTO userInputDTO) {
- User user = new User();
- BeanUtils.copyProperties(userInputDTO,user);
- return user;
- }
- @Override
- protected UserInputDTO doBackward(User user) {
- UserInputDTO userInputDTO = new UserInputDTO();
- BeanUtils.copyProperties(user,userInputDTO);
- return userInputDTO;
- }
- }
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|