前面实现的用户管理的增删改查操作,所进行的大量处理在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;
}
}
这样处理之后,是不是感觉脉络更清楚,当然,大家可以思考一下,是否还可以进一步处理这些业务,是否可以将重复的代码抽取出来,进一步重构呢?