【问题标题】:Design pattern for decouple service layer with controller layer best practice Spring boot服务层与控制器层解耦的设计模式最佳实践 Spring boot
【发布时间】:2021-02-02 21:24:36
【问题描述】:

我的图层服务中有多个服务,我必须执行一些方法,但每个方法在不同的服务中。

MyLastService 有很多功能和我的MyLastService 服务的 Autowired 服务示例:

@Service
class MyLastServiceImp implement MyLastService{
  @Autowired
  ProductService productService;

  @Autowired
  OrderService orderService; 

  @Autowired
  UserService userService;

  @Autowired
  ReferentialService referentialService;

  void addNewOrder(MyRequest req) {
    try {
     Product p = productService.findProduct(req.getProductId());
     User u = userService.findUserByUserName(req.getUserName()); 
     City c = referentialService.findCity(req.getCity());
     orderService.addOrder(p, u, c);
   }
    catch(Exception e) {
      LOGGER.error("error : {}", e.getMessage());
    }
  }
}

我对这个实现不满意,因为我会有很多其他的服务,并且在一个服务MyLastService 可以使我的代码难以阅读和维护。这就是我目前为我的应用程序搜索设计模式的原因。

如果我将所有其他服务都放在他身上,MyLastService 会发生什么?
我现在的想法是添加新图层,但我不知道是什么?
任何人都可以向我提出这个用例的最佳实践吗?

【问题讨论】:

    标签: spring-boot design-patterns


    【解决方案1】:

    你做得很好,没有创建从一项服务到另一项服务的依赖关系。

    在我看来,在这种情况下,您应该使用Facade

    在你的情况下,这个 Facade 类似于OrderFacade。然后这个 Facade 会在你发布的代码中做你正在做的事情

    【讨论】:

    • 谢谢@Matheus Cirillo,最后我看不到在我的用例中使用外观的任何优势我需要创建facadeService和Autowired所有必要的服务我不想要这个,但我想要像我认为的工厂!
    • 在这种情况下为什么要使用工厂?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多