编程语言
首页 > 编程语言> > 如何使用Java Spring Boot实现业务逻辑层和存储库层?

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

作者:互联网

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

目前,对于存储库层,我创建了一个接口IMainDao,它扩展了JpaRepository:

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似乎不必要.您可以根据需要为实体定义接口,例如:用户,订单

@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没有任何意义.

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

假设UserService和OrderService都具有通用的搜索方法.然后,我们可以有一个通用的服务接口(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 }
}

标签:business-logic,spring-boot,data-access-layer,spring,java
来源: https://codeday.me/bug/20191025/1925839.html