在阅读了一些关于类层次结构应该如何的指南之后,我对分层架构非常陌生,+ spring + hibernate -
我想出了这个结构:
public interface GenericDAO {
public <T> T getItemById(long id, Class<T> c);
public <T> int save(T... objectsToSave);
public <T> int saveOrUpdate(T... objectsToSave);
public <T> int delete(T... objectsToDelete);
.
.
}
现在我所有的其他 daos 实现都使用这个通用 dao 作为私有字段,以便使用它的基本方法:即:
@Repository
public class UserDAOImpl implements UserDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteUser(User u) {
return dao.delete(u);
}
.
.
.
}
我的服务是这样的:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional(readOnly = false)
public int deleteUser(User u) {
return userDao.deleteUser(u);
}
.
.
.
}
我不明白为什么我的项目中需要 UserDaoImpl 、 CarDaoImpl 、 XDaoImpl ?这似乎真的是多余的,因为所有 XDaoImpls 看起来都一样:
@Repository
public class UserDAOImpl implements UserDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteUser(User u) {
return dao.delete(u);
}
.
.
.
}
@Repository
public class CarDAOImpl implements CarDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteCar(Car c) {
return dao.delete(c);
}
.
.
.
}
@Repository
public class XDAOImpl implements XDao {
@Autowired
private GenericDAO dao;
@Override
public int deleteX(X c) {
return dao.delete(c);
}
.
.
.
}
我不能创建任何 XDaoImpl 而是使用 GenericDaoImpl 并节省大量的类创建,不是吗?
如果需要像 deleteUserCar(User u) 这样的复杂操作,我可以在服务中实现逻辑:
UserService {
public void deleteUserCar(User u) {
Car c = u.getCar();
CarService cs.deleteCar(c);
}
}
我错过了什么吗?谁能提供一个例子,只使用 GenericDaoImpl 而不是 XDaoImpl 会让我后悔吗?
谢谢