如何避免依赖依赖对象



我有一个关于Spring Environment的问题。如果我有一个控制器,并且该控制器内部有很多相互依赖的服务,如果我更改该控制器上的某些内容,我应该通过减少代码量来"减少"做什么?这样,我将如何避免依赖问题?,希望我的问题对你来说很清楚。

谢谢

我的两分钱:

  • 按照 Spring 团队的建议使用自动连线构造函数注入。这样做会使控制器变得臃肿时非常明显(请参阅下一点(
  • 构造函数中不超过 3 个依赖项,正如 Bob Martin 在他的书 Clean Code 中所建议的那样。如果你有更多,那么你的控制器可能违反了单一责任原则。
  • 如果您希望控制器执行更多操作,那么可能应该将该功能放在第二个控制器中!

一个粗略的例子:

@RestController
public class PetShopController {
@Autowired private DogService dogService;
@Autowired private CatService catService;
@Autowired private MonkeyService monkeyService;
@Autowired private FishService fishService;
// all three services above are dependent on the two below
@Autowired private PetInsuranceService petInsuranceService;
@Autowired private PetOwnerService petOwnerService; 
//..and so on
}

更改为:

@RestController
public class DogsController {
private DogService dogService;
//the insurance/owner services have been split into one service/pet type
private DogInsuranceService dogInsuranceService; 
private DogOwnerService dogOwnerService;
//I've used interfaces for types here
@Autowired DogsController(IPetService dogService,IInsuranceService dogInsuranceService, IOwnerService dogOwnerService) {
this.dogService = dogService;
this.dogInsuranceService = dogInsuranceService;
this.dogOwnerService = dogOwnerService;
}
//..and so on
// make similar controllers for other pets!!
}

我认为这不是关于减少代码量,而是关于确保每个类都有一个单一的责任!例如/在这里狗做狗的事情,比如吠叫!猫做猫的事情像喵喵!!一旦您有一个具有超过 3 个 deps/服务的类同时执行这两个或更多操作,那么该类就需要拆分!!

控制器内部有很多服务,每个服务都是依赖的 其他

这是一种设计气味,你甚至可能会遇到这种设计的循环依赖问题。您可能需要在此处发布控制器代码以获取更多帮助。

最新更新