首页 > 解决方案 > UserFactory 对 User 对象的填充数据是否违反了 DRY?

问题描述

我这样做RegisterUserService需要request参数并在验证后newUser通过发送requestfillNewUser()UserFactory 类的方法来创建。但是问题来了,在fillNewUser()方法中我必须再次从请求中获取所有参数。是否违反 DRY?

public class RegisterUserService {

private final UserFactory userFactory = UserFactory.getInstance();

public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException,  SQLException {

    HttpSession session = request.getSession();
    RequestDispatcher dispatcher;
    Boolean isAllOkWithEmail = false;             //just for example     
    Boolean isAnotherParameterChecking = false;   //just for example   

    String email = request.getParameter(USER_EMAIL).trim();
    String login = request.getParameter(USER_LOGIN).trim();
    String password = request.getParameter(USER_PASSWORD).trim();

     // here I am validating request parameters
    if (!isAllOkWithEmail) {
     // displaying errors
    } else if (!isAnotherParameterChecking) {
     // checking and displaying errors
    } else {
        /// filling new registered User with UserFactory for Single Responsibility
        User user = userFactory.fillNewUser(request);
        userDAO.insert(user);

        session.setAttribute(USER, user);
        dispatcher = request.getRequestDispatcher(INDEX_JSP);
        dispatcher.forward(request, response);
    }
}

我的用户工厂:

public class UserFactory {

private static UserFactory instance = new UserFactory();

private UserFactory() {
}

public User fillNewUser(HttpServletRequest request) {
    User user = new User();
    // Writing here same code and violating DRY????
    user.setEmail(request.getParameter(USER_EMAIL).trim());
    user.setLogin(request.getParameter(USER_LOGIN).trim());
    user.setPassword(request.getParameter(USER_PASSWORD).trim());

    return user;
}

public static UserFactory getInstance() {
    return instance;
}

}

或者有没有更好的解决方案?

谢谢!

标签: javaservicefactorydryuser-registration

解决方案


推荐阅读