日期:2014-05-18  浏览次数:20643 次

大家来讨论下业务层(BO)该做什么事?该怎样做事?
本人表达能力较差,举个例子来说明:
假设有个有个用户登录的功能,Servlet url是:login.do,BO是UserBo,简略代码如下:
Java code

//实体类
public class User {
    String name;
    String password;
    
    public User(){
    }
    
    public User(String name, String password) {
        super();
        this.name = name;
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}

//Dao 类
public class UserDao {
    public User findUserByName(String username){
        return new User(username, "password");
    }

        public boolean addUser(User user){
        // do something...
        return true;
    }
}


//Bo 类

public class UserBo {
    private UserDao dao = new UserDao();
    
    public boolean login(String username,String password){
        User u = dao.findUserByName(username);
        if( u != null && u.getPassword().equals(password)){
            return true;
        }
        return false;
    }

    public boolean addUser(User user){
        return dao.addUser(user);
    }
}

//Servlet
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Login extends HttpServlet {
    
    private UserBo bo = new UserBo();
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        boolean b = bo.login(username, password);
        if( b ){
            request.setAttribute("user", username);
            response.sendRedirect("loginSuccess.jsp");
        }else{
            response.sendRedirect("loginError.jsp");
        }
    }

}




以上是简单的代码,现在很明显的一个问题摆在面前了,那就是Bo类的login方法只是简单的返回一个boolean值
是无法满足我们需求的,因为只返回boolean值的话只能知道登录是成功和失败,但是不能知道失败的原因是什么
所以无法给客户端一个丰富的结果。这只是一个小小的例子,大家来分析一下BO层如何设计才能解决这类问题。
还有,BO类的addUser方法,我以前做的项目里类似的add、update、delete、方法都只是简单的包装下dao的方法
BO在这里又能做些什么呢?都知道分层有好处,但是,如果只是简单的包装,BO就差不多算是没用的了,直接在
Servlet里面引用Dao的接口一样不会影响程序的偶和性。
我的问题的很明确,就是:业务层(BO)该做什么事?该怎样做事?
因为马上就要做项目了,我想在新项目里把功能做的更完善些。
呵呵,本人还是有点可用分的,如果在这里能得到有建设性的回答的话,我是不会吝啬那点点分滴。~


------解决方案--------------------
Java code

public User login(String username,String password) throws LoginException{
        User u = dao.findUserByName(username);
        if(u == null) {
            throw new LoginException("不存在的用户");
        }
        if(!u.getPassword().equals(password)){
            throw new LoginException("密码错误");
        }
        return u;
}

------解决方案--------------------
业务层(BO)该做什么事?该怎样做事?


业务复杂些的话你就需要在public class Login extends HttpServlet {
调用多个DAO------什么能称为业务就是这种方式

LZ您知道了么,如果调用了多个DAO就知道他的好处了。