Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 门面层之间存在依赖关系是常见的吗?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 门面层之间存在依赖关系是常见的吗?

Java 门面层之间存在依赖关系是常见的吗?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的应用程序具有以下层: -门面 -业务对象 -存储库(Spring JPA数据) 让我们假设以下类: @Component public class MessageFacade implements MessageService { @Autowired private GarageBO garageBO; @Autowired private MessageBO messageBO; public void createFeedbackMessage(...) {

我的应用程序具有以下层: -门面 -业务对象 -存储库(Spring JPA数据)

让我们假设以下类:

@Component
public class MessageFacade implements MessageService {
  @Autowired
  private GarageBO garageBO;
  @Autowired
  private MessageBO messageBO;

  public void createFeedbackMessage(...) {
    messageBO.createFeedbackMessage(...);
    garageBO.createFeedback(...);
  }
}

@Component
public class ServiceOrderFacade implements ServiceOrderService {     
  @Autowired
  private ServiceOrderBO serviceOrderBO;
  @Autowired
  private MessageBO messageBO;
  @Autowired
  private GarageBO garageBO;

  public void createServiceOrder(...) {
    serviceOrderBO.createServiceOrder(...);
    messageBO.createFeedbackMessage(...);
    garageBO.createFeedback(...);
  }
}
观察MessageFacade中的createFeedbackMessage方法,我有:
1)MessageBO中的createFeedbackMessage方法它负责创建带有反馈调查链接的电子邮件
2)garageBO中的createFeedbackMessage方法创建带有问题和回答的反馈实体

在ServiceOrderFacade中的createServiceOrder方法上,我需要调用ServiceOrderBO的一个方法,之后我需要在MessageFacade中具有与createFeedbackMessage方法相同的行为

在ServiceOrderFacade->MessageFacade之间创建依赖关系是个坏主意吗

守则是:

@Component
public class ServiceOrderFacade implements ServiceOrderService {     
  @Autowired
  private ServiceOrderBO serviceOrderBO;
  @Autowired
  private MessageBO messageBO;
  @Autowired
  private GarageBO garageBO;

  public void createServiceOrder(...) {
    serviceOrderBO.createServiceOrder(...);
    getMessageService().createFeedbackMessage(...);
  }
}

如果你认为你有问题。您可以创建另一个层,就像公共层一样,它是业务对象层的依赖项,将创建一次,并将在您的整个BO中使用(如果您愿意)

另一个层有名称吗?我按照上面详述的方法解决了这个问题,但它非常难看,因为将来我可能会有一个循环依赖。我会听从你的建议,谢谢你的回复!这里我们称之为公共层。在这个层中,您可以集中您的存储库,甚至是外观层。我不明白你什么时候会有循环依赖?在我看来,这一层永远是一个永远不会依赖的模块,例如一个facade对不起,我表达错了。我的意思是,我按照我在自己的问题中的建议,使用:getMessageService().createFeedbackMessage(…);通过这种方式解决问题可以创建循环依赖关系。