一步一步做项目(10)重构

一步一步做项目(10)重构

前面实现的用户管理的增删改查操作,所进行的大量处理在Action端,也就是处理Web页与Struts2交互上,在Action中处理了与业务有关的内容,例如,判断了id是否有效等,因此,为了使整个系统更加有效,将这样的处理移到service端,那么,当我们需要换一种前端处理的时候,就不会产生不良影响了。
具体处理如下:

create()

将Action类中的create()方法,处理的业务规则判断,迁移到Service类中,将Action类中的变为:

    /**
     * Action中创建新的用户
     * @return
     */
    public String create() {
    	log.debug("Action > 添加新用户,id为 {}", userId);
        String info = userService.save(model);
        addActionMessage(info);
        return "success";
    }

而将Service类中对应的save()方法,变为:

	/**
	 * Service业务层保存用户
	 * @param user
	 */
	public String save(Users user) {
		log.debug("Service > 存储用户信息,id为 {}", user.getUserId());
		Collection<String> names = new ArrayList<String>();
        Collection<String> ids = new ArrayList<String>();
        list = getAll();
        for(Users user1 : list) {
        	names.add(user1.getUserName());
        	ids.add(user1.getUserId());
        }
        if(names.contains(user.getUserName()) || ids.contains(user.getUserId())){
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.createError");
        	return info;
        } else {
        	user.setUserPassword(SecurityFunctions.sha3(user.getUserPassword(), 512));
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.create");
    		userDao.save(user);
            return info;
        }
	}

delete()

将Action类中的delete()方法,处理的业务规则判断,迁移到Service类中,将Action类中的变为:

    /**
     * Action中删除指定id的用户
     * @return
     */
    public String delete() {
        log.debug("Action > 删除指定id的用户,id为 {}", userId);
    	String info = userService.delete(userId);
        addActionMessage(info);
        return "success";
    }

而将Service类中对应的delete()方法,变为:

	/**
	 * Service业务层删除指定id的用户
	 * @param user
	 */
	public String delete(String userId) {
		log.debug("Service > 删除指定id的用户,id为 {}", userId);
        if(userId == null) {
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.deleteError");
        	return info;
        }
    	Collection<String> names = new ArrayList<String>();
        list = getAll();
        for(Users user : list) {
       		names.add(user.getUserId());
        }
        if(names.contains(userId)){
    		userDao.delete(userId);
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.delete");
        	return info;
        } else {
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.deleteError");
        	return info;
        }
	}

update()

将Action类中的update()方法,处理的业务规则判断,迁移到Service类中,将Action类中的变为:

    /**
     * Action中修改用户信息
     * @return
     */
    public String update() {
    	log.debug("Action > 修改用户信息,id为 {}", userId);
    	String info = userService.update(model);
        addActionMessage(info);
        return "success";
    }

而将Service类中对应的update()方法,变为:

	/**
	 * Service业务层修改用户信息
	 * @param user
	 */
	public String update(Users user) {
		log.debug("Service > 修改用户信息,id为 {}", user.getUserId());
        String newUserName = user.getUserName();
        String userId = user.getUserId();
    	Collection<String> names = new ArrayList<String>();
        list = getAll();
        for(Users user1 : list) {
        	if(user1.getUserId().equals(userId) == false)
        		names.add(user1.getUserName());
        }
        if(names.contains(newUserName)){
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.updateError");
        	return info;
        } else {
        	user.setUserPassword(SecurityFunctions.sha3(user.getUserPassword(), 512));
            userDao.update(user);
            String info = ResourceBundle.getBundle("Messages").getString("Users.result.update");
        	return info;
        }
	}

这样处理之后,是不是感觉脉络更清楚,当然,大家可以思考一下,是否还可以进一步处理这些业务,是否可以将重复的代码抽取出来,进一步重构呢?

发布了42 篇原创文章 · 获赞 15 · 访问量 5869

猜你喜欢

转载自blog.csdn.net/ZhangCurie/article/details/102298078