java - 避免服务类之间的紧耦合

标签 java spring spring-mvc soa

假设我有 2 个服务类:

UserService
ProductService

如果在我的 ProductService 类中注入(inject) UserService 是错误的吗?

public class ProductserviceImpl implements ProductService {


  @Autowired
  UserService userService;


  @Override
  public void someThing() {
      ..
      userService.otherThing(..);
      ..
  }

}

我知道作为替代方案我可以创建另一个同时注入(inject) UserService 和 ProductService 的类,但是为此类命名非常棘手 :) 是否有这些类型的名称SOA 世界中的类?

最佳答案

1) 如果在我的 ProductService 类中注入(inject) UserService 是错误的吗?

这本身没有任何问题,但有以下注意事项:

  • 请注意,您可能会朝着一个类做太多事情的方向前进(这里是 ProductService)
  • 注意不要引入循环依赖(你不应该让 UserService 也依赖于 ProductService)
  • 通过将您的依赖项连接到接口(interface)而不是具体类来限制紧耦合(这里您自动连接 UserService 而不是 UserServiceImpl,这很好)

2) 是否有此类类的名称(同时注入(inject) UserService 和 ProductService)?

是的,如前所述,自 Mediator Pattern 以来,您可以将此类称为中介者似乎是在形容这个。

您可以同时拥有低级服务和高级服务,将低级服务(ProductService、UserService)注入(inject)到高级服务(例如,PurchaseOrderService 或 PurchaseOrderMediator)中。或者,对于这种特殊情况,您可能会将产品服务视为依赖于 UserService 的单个高级服务。那时更多的是关于哪个构造更多cohesive在您的业务逻辑和应用程序的上下文中。

关于java - 避免服务类之间的紧耦合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12943116/

相关文章:

java - JUnit 测试(使用 Spring MVC 和 Hibernate): IllegalArgumentException: Unknown entity

mysql - Spring MVC Rest Web服务

Java 从类类型实例化一个对象

java - Spring bean 范围为 "one object per test method"

java - 优化图片显示

Java 日志记录没有记录所有类?

java - hibernate 状态下的未知实体

java - Web 上不再提供 Spring Beans Schema?

java - 何时精确调用 @ModelAttribute 注释方法?

java - 将 Spring Boot war 文件部署到 Tomcat 结果为 404,本地主机工作正常