Spring框架:传统开发存在的问题
一,原始开发过程
没有接口的编程
1 public class UserDao{ 2 public void saveUser(){ 3 //JDBC 插入用户数据的代码或Hibernate插入用户数据的代码 4 } 5 }
1 public class UserService{ 2 public void saveUser(){ 3 UserDao userDao = new UserDao(); 4 userDao.saveUser(); 5 } 6 }
分析:没有多态,代码维护起来工作量巨大
二,传统的Java EE开发过程
以业务层(service)和持久层(dao)为例
业务层调用持久层,持久层调用数据库,持久层用的是JDBC
DAO层
1 /** 2 *用户管理Dao接口 3 */ 4 public interface UserDao { 5 public void save(); 6 }
1 /** 2 *用户管理Dao接口实现类, 使用JDBC 3 */ 4 public class UserDaoImpl implements UserDao { 5 @Override 6 public void save() { 7 System.out.printl("UserDaoImpl执行了..."); 8 } 9 }
Service层
1 /** 2 *用户管理Service接口 3 */ 4 public interface UserService { 5 public void save(); 6 }
1 /** 2 *业务层调用Dao 3 */ 4 public class UserServiceImpl{ 5 public void saveUser(){ 6 UserDao userDao = new UserDaoImpl(); 7 } 8 }
现在的需求是想把持久层改用Hibernate框架则需要变动的代码有
1 /** 2 *用户管理Dao接口实现类,使用Hibernate框架 3 */ 4 public class UserDaoHibernateImpl implements UserDao { 5 @Override 6 public void save() { 7 System.out.printl("UserDaoHibernateImpl执行了..."); 8 } 9 }
1 /** 2 *业务层调用Dao 3 */ 4 public class UserServiceImpl{ 5 public void saveUser(){ 6 UserDao userDao = new UserDaoHibernateImpl(); 7 } 8 }
那么问题又来了,若果某天需求又发生变化,客户想使用现在流行的Mybatis框架代替Hibernate,这样又得改代码(这里的涉及的业务逻辑比较少,当涉及的业务逻辑很多时,增删改查各种条件都有时 ,那时改起代码的工作量将会很大,也就是所说的维护难)
总结:
上述UserDaoImpl与UserDao之间存在耦合关系,如果UserDao的实现类需要用Hibernate进行数据调用则需要创建新的类USerDaoHibernateImpl,同时 UserDao userDao = new USerDaoHibernateImpl();如果又不想用hibernate,改用mybatis,则又需要改底层实现,很麻烦。