在我的职业生涯中,我看到了几个不同的设计,如何使用DAO
, Service
,Controller
层。我想问两个,它们相似但几乎没有区别。第一个设计在层之间创建了可见的屏障。控制器总是使用服务并且只使用服务。服务可以使用其他服务或DAO
s。控制器不能DAO
直接使用任何。这种设计很清楚,但对我来说有很大的缺点:我们总是必须为DAO
. 但在很多情况下,Service
方法只调用DAO
s 方法和其他任何东西。
例如:我们有UserDao
class UserDao {
public List<User> findByName(String name) { ... }
public List<User> findByLastName(String name) { ... }
public List<User> findOlderThan(int age) { ... }
......
}
以上所有方法均由Controllers
. 在我们的情况下我们应该怎么做?在中创建类似的方法UserService
:
class UserService {
public List<User> findByName(String name) { return userDao.findByName(name); }
public List<User> findByLastName(String name) { return userDao.findByLastName(name); }
public List<User> findOlderThan(int age) { return userDao.findOlderThan(age); }
......
}
对我来说,这是只读方法的额外不必要层。
在第二个设计中我们没有这个问题,因为我们可以直接在控制器中使用 DAO。在这个设计中,我们有一个规则:如果我们想从“数据存储”中检索数据,我们可以DAO
在任何层使用,如果我们想在“数据存储”中进行一些更改,我们必须使用服务方法。
各位,你们觉得这些设计怎么样?哪个更好?我应该在我的项目中使用哪些,哪些应该被遗忘?你能和我分享你在这方面的经验吗?