分层的初步理解

来源:互联网 发布:java中spring是什么 编辑:程序博客网 时间:2024/04/30 14:20

需求:有一个用户管理系统,会用到各种数据库【数据库随意换用】,怎么实现?

1.测试类:Test.java

2.用户对象:User.java

3.服务类:UserService.java

4.操作数据库的接口:UserDAO.java

5.数据库的接口实现:UserDAOImpl

我们先看看它们之间的调用关系:

                 


上述的业务功能是这样的,假如就增加用户业务功能而言:在测试文件中,我们调用的是Service层的UserService里面的方法,通过UserService调用UserDAO来操作数据库,在UserDAO中将User对象实体传到后台数据库中保存。


这里我们为什么会有一个接口:实际上需要理解的就是面向接口编程的好处,写一个接口,实现部分可以是MySql的,Oracle的,SqlServer的,SBase的,或者在这里写Hibernate通过方言,文件,之类来实现功能,这样在业务功能上就具有了扩展性。【面向接口编程】



代码如下:

package com.bjsxt.service;import com.bjsxt.dao.UserDAO;import com.bjsxt.model.User;public class UserService {private UserDAO userDAO=New UserDAOImpl();  public void add(User user) {userDAO.save(user);}public UserDAO getUserDAO() {return userDAO;}public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}}



package com.bjsxt.model;public class User {private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}


package com.bjsxt.dao;import com.bjsxt.model.User;public interface UserDAO {public void save(User user);}



package com.bjsxt.dao.impl;import com.bjsxt.dao.UserDAO;import com.bjsxt.model.User;public class UserDAOImpl implements UserDAO {public void save(User user) {//Hibernate//JDBC//XML//NetWorkSystem.out.println("user saved!");}}




当然我们直接在Test.java中写所有的业务逻辑就行了,显然不好;如果将add()写在User中,那么每次添加用户的时候,需要new一个用户,测试的时候需要用到一个用户;有人说可以用Hibernate方言实现数据库的任意切换,但是如果存储到文件中的时候,这个时候就解决不了问题了;有人说直接用Service操作用户和DB了,但这样无法实现数据库的任意切换,我们利用抽象,利用接口实现了需求。







0 0
原创粉丝点击