繁体   English   中英

如何使用Java Spring Boot实现业务逻辑层和存储库层?

[英]How to implement the Business Logic layer and the Repository Layer with Java Spring Boot?

我正在尝试为我的应用程序创建业务逻辑(服务)和存储库(数据访问)层。 我想正确地做,但我不是专家。

目前,存储库层,我创建了扩展JpaRepository接口IMainDao:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface IMainDao extends JpaRepository<Object, Integer>{
}

所以我的所有存储库接口都可以扩展IMainDao:

import org.springframework.stereotype.Repository;

@Repository
public interface IUserDao extends IMainDao{

}

我还创建了业务逻辑层。 一个接口IMainService

import java.util.List;
import org.springframework.stereotype.Service;

@Service
public interface IMainService {

    Object getById(int id);
    List<Object> getAll();
    Object create(Object o);
    Object update(Object o);
    void delete(int id);
}

这个接口MainService的实现

@Service
public class MainService implements IMainService{

    @Autowired
    private IMainDao mainDao;

    @Override
    public Object getById(int id) {
        return mainDao.findById(id);
    }

    @Override
    public List<Object> getAll() {
        return mainDao.findAll();
    }

    @Override
    public Object create(Object o) {       
        Object obj = mainDao.save(o);     
        return obj;
    }

//Other methods...

而像IUserService其他接口扩展IMainService:

import org.springframework.stereotype.Service;

@Service
public interface IUserService extends IMainService{

}

通过他们的实现:

public abstract class UserService implements IUserService{

}

我做得对吗? 如果不是,您对我推荐什么,我可以在哪里优化?

谢谢!

你的IMainDao似乎没必要。 您可以根据实体需要定义接口,例如: User, Order

@Repository
interface UserRepository extends JpaRepository<User, Long> {}

@Repository
interface OrderRepository extends JpaRepository<Order, Long> {}

而且,在您的业务逻辑层中,您可以拥有服务接口及其实现,例如:

@Service
interface UserService{
    ... method declarations goes here
} 

class UserServiceImpl implements UserService {
   @Autowired
   UserRepository userRepository;     

   ... implement interface methods 
} 

如果在多个服务类中有通用方法,则可以使用通用服务接口,否则, IMainService没有意义。

==== [编辑]介绍通用服务接口====

让我们假设UserServiceOrderService都有共同的搜索方法。 然后我们可以拥有一个通用的服务接口( SearchService )并在必需的服务实现类中实现它。

interface SearchService<T, I> {
  T findLatestOne(){}
  T lastEditedOne(){}
  List<T> searchByKeywords{}    
}

class UserService implements SerchService<User, Long> {
  User findLatestOne(){ ... implementation }
  User lastEditedOne(){ ... implementation }
  List<User> searchByKeywords{ ... implementation }
}

class OrderService implements SerchService<Order, Long> {
  Order findLatestOne(){ ... implementation }
  Order lastEditedOne(){ ... implementation }
  List<Order> searchByKeywords{ ... implementation }
}

我建议根据实体模型的需要定义存储库。

@Repository
public interface IUserDao extends JpaRepository<User, Long>{
}

实现的API将根据定义的泛型进行调整。

关于服务,请遵循这种方法; 开发接口并实现它们以提供具体功能,依赖于注入的存储库。 尽管如此,尽量避免服务中的继承; 大多数情况下,这并不是真正需要的,除非有一些特别需要保证的东西,例如通过泛型应该根据服务的具体情况调整的通用逻辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM