个人认为,你现在的结构是这样的,代理层(B)、业务层(C)、数据层等等吧,你的问题是是否要在C后加一个DAO层,我认为还是有用的。 原因:你可以这么想,现在你的业务层中是一些简单的逻辑(CRUD),其实就是直接调用Hibernate的方法,那么咱们来写一段程序看看。
接口:Login(String userName,String passWord) throw YourException;
delegate: public Login(String userName,String passWord) throw YourException { UserService us = ServiceFactory.getService("User"); us.Login(String userName,String passWord); }
service: public Login(String userName,String passWord) throw YourException { try{ //hibernate实现 }catch(Exception e){ YourException ye = new YourException(e); throw ye; } } 如果这个时候,你的C层要更改持久层实现技术,比如使用EJB,jdbc 这个时候考虑问题的时候,其实业务逻辑并没有变,只是访问的方法变了。 可是现在的架构必须去更改service层的代码。 或者在今后的技术进步中,service层出现别的技术,那么你又要重写数据访问的代码,如果改成下面这样: service层: public Login(String userName,String passWord) throw YourException { try{ UserDAO = DAOFactory.getDAO("User");//通过配置文件 User user = UserDAO.getUserByUserName(String userName); if(isExist(user)) { checkpassword(user); //添加业务逻辑 checkActive(user); } }catch(Exception e){ YourException ye = new YourException(e); throw ye; } }
DAO: interface: User getUserByUserName(String userName) throw DBException; implement: UserDAOImplHibernate User getUserByUserName(String userName) throw DBException;
如果使用别的实现方法,可以重新添加一个UserDAOImplEjb,然后通过配置文件配置,这样服务层的代码不用更改。 如果技术进步,业务层需要重写,这时候那些访问数据的代码也不用重写了。
不知道说的对不对,希望大家讨论。
还有就是,代理层到底有什么用?是和分布式有关系吗?
|
|