【问题标题】:Spring boot circular dependency design problemSpring Boot循环依赖设计问题
【发布时间】:2020-09-25 17:36:10
【问题描述】:

是的,又是这个问题……

我设计了一个批处理系统,它调用 ActionService 的 notify 方法,在 notify 方法中,取决于它的调用方式,有一个调用 create 批处理服务的方法。

示例代码块如下所示;

@Service
public class BatchService{
  private final BatchRepository batchRepository;
  private final ActionService actionService;

  public Batch create(Batch batch){
     return batchRepository.save(batch);
  }

  public void triggerNotifiers(){
     ...
     actionService.notify(...);
     ...
  }
} 


@Service
public class ActionService{
  private final ActionRepository actionRepository;
  private final BatchService batchService;

  public void notify(...){
     ...
     if(/*some special cases*/)
         batchService.create(...);
     ...
  }
} 

批处理服务的功能是调用Action服务的notify方法。 Action 服务能否创建未来的通知器取决于传入的通知数据。

所以它们彼此非常依赖。

你认为有没有更好的方法/逻辑/设计来做到这一点?

【问题讨论】:

    标签: java spring database-design circular-dependency


    【解决方案1】:

    在我写这个问题的时候,我想出了一个办法:

    @Component
    public class Batch{
      private final BatchService batchService;
      private final ActionService actionService;
    
      public void triggerNotifiers(){
         ...
         batchService.findProperBatch(...);
         actionService.notify(...);
         ...
      }
    } 
    
    @Service
    public class BatchService{
      private final BatchRepository batchRepository;
    
      public Batch create(Batch batch){
         return batchRepository.save(batch);
      }
    
      public Batch findProperBatch(...){
         ...
         return batch;
      }
    
    } 
    
    @Service
    public class ActionService{
      private final ActionRepository actionRepository;
      private final BatchService batchService;
    
      public void notify(...){
         ...
         if(/*some special cases*/)
             batchService.create(...);
         ...
      }
    } 
    

    如果您有更好/替代的解决方案,请随时分享您的想法。

    【讨论】:

      猜你喜欢
      • 2015-05-17
      • 2020-07-15
      • 2011-01-04
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      相关资源
      最近更新 更多