我的Dao的设置如下:
UserDao
UserDaoImpl
我的业务层位于服务类中:
UserService
UserServiceImpl
现在我的Dao有基本操作,如get,update,save等。
我想在我的服务类中公开这些方法,而不必手动将它们添加到每个服务接口。
我怎样才能做到这一点?
答案 0 :(得分:3)
拥有服务的目的是在事务中聚合DAO方法,并添加业务逻辑。如果你所有的服务都在包装各个DAO方法,那就没有意义了。使用像Grails这样的框架(或Play,所以你仍然可以使用Java,如果你想要的话)动态地将数据访问方法添加到你的域对象中,你可以从控制器中调用它们并且可以减少很少的CRUD代码(但仍然如果您以后需要服务,可以选择服务。)
答案 1 :(得分:2)
如果除了CRUD操作之外该服务没有做任何其他事情,并且没有其他服务需要该DAO,我认为没有理由不能将这些操作放在服务实现中并省去DAO。< / p>
将服务用作传递是很容易的:
public interface FooService {
Foo find(Long id); // Same as DAO signature
}
@Service
public class FooServiceImpl implements FooService {
@Resource(name = "fooRepository")
private FooRepository fooRepository;
public Foo find(Long id) { return this.fooRepository.find(id); }
}
可以写一个通用的DAO:
public interface GenericRepository<V, K extends Serializable> {
V find(K key);
List<V> find();
K save(V value);
void update(V value);
void delete(V value);
}
答案 2 :(得分:0)
是的,这是适配器模式的一种变体
您还可以将UserDaoImpl扩展为UserServiceImpl,例如
UserServiceImpl extend UserDaoImpl implements UserService{
// Rest of the Service implementation
}