Java 耦合 - 我应该跨不同模块依赖服务层还是存储库层?

标签 java spring

我已经实现了一个 CodeService,它将从代码表中检索国家/地区列表。

在我的 ShippingService 中,我想检查订单是否运送到某个国家/地区。

在这种情况下,我应该使用 CodeService 还是 CodeDAO 来检索国家/地区列表。

public interface CodeService {
   public List<String> getCountryList();
}


@Service
public class CodeServiceImpl implements CodeService {

   @Autowired
   CodeDAO codeDao

   public List<String> getCountryList() {
       return codeDao.getCountryList();      
   }
}


@Service
public class ShippingServiceImpl implements ShippingService {

   @Autowired
   CodeDAO codeDao;

   @Autowired
   CodeSevice codeService;


   public void addOrder(Order order) {

     List<String> countries = codeService.getCountryList(); 
    //List<String> countries = codeDao.getCountryList();    

   }
}

最佳答案

如果您没有任何额外的逻辑(例如本例),我认为最好直接调用 DAO。

优点:始终调用服务,可以让您将 DAO 层与应用程序代码完全分离。 缺点:您将为每个 dao 创建 2 个冗余类,这只会将调用委托(delegate)给 DAO。

服务层应用于所获取数据的业务逻辑。例如:如果您想为获取的国家/地区添加权限。

如果将来要向国家/地区添加额外的逻辑,最好进行重构并创建服务。

关于Java 耦合 - 我应该跨不同模块依赖服务层还是存储库层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782481/

相关文章:

java - 使用 Spring Boot JdbcTemplate 获取 java.lang.NullPointerException

java - datetime 和 tinyint 的数据类型查询

java - 如何在 Long 类型属性的 Sql 数据实现中传递 NULL 值?

java - spring-mvc 3.0.5 : what's the preferred way to instantiate the JPA entity manager

java - Jasypt:主密码如何安全?

java - 如何在 spring 中提供测试数据源?

Java ReplaceAll() 提取数字和句点

java - 为什么私有(private)方法也不能是最终的?

Java 9 ServiceLoader 运行时模块加载和替换

java - Flyway 中的 Spring Autowiring