나는 x, y, z의 3 가지 클래스를 가지고있다. x는 z의 메소드를 호출하는 y의 함수를 호출하고 메소드가 같은 메소드에서 실행 된 직후 x의 함수를 호출해야합니다. 이로 인해 종속성 주입을 수행하는 동안 순환 의존성이 끊임없이 발생합니다.Java에서 순환 의존성을 제거하는 방법은 무엇입니까?
이 문제를 해결하는 방법? 이것에서 벗어나는 방법?
EventService 클래스 (클래스 X)
private void callHandlers(ApplicationEvent event) {
ChecklistEventHandler handler = new ChecklistEventHandler();
handler.handle(event); // here class Y is getting called.
}
public void createEvent(String type, String key, String creator, Map<String, Object> data) {
AccountInfo accountInfo = (AccountInfo) Http.Context.current().args.get(GtConstants.ACCOUNT_INFO);
String eventData = JacksonUtil.toString(data);
ApplicationEvent event = new ApplicationEvent(accountInfo.getSchemaName(), type, key, creator, eventData);
repository.save(event);
scheduleForProcessing(event,accountInfo);
}
ChecklistEventHandler 클래스 (클래스 Y)
public void handle(ApplicationEvent event) {
ChecklistCriteria checklistCriteria = new ChecklistCriteria();
checklistCriteria.setEventType(event.getType());
checklistCriteria.setArchived(false);
taskManagementService.createChecklistInstancesAndTask(event, checklistCriteria); // here class Z is getting called.
}
TaskManagementService 클래스 (클래스 Z)이 의심을 지 웁니다
public void createChecklistInstancesAndTask(ApplicationEvent event, ChecklistCriteria checklistCriteria) {
List<Checklist> checkListCollection = getChecklistCollectionBasedOnEvent(checklistCriteria.getEventType(),
checklistCriteria.getArchived(),
LocalDate now = LocalDate.now();
createChecklistInstancesAndTask(event, checkListCollection, now);
//here i am calling EventService class (class X) eventService.createEvent(TaskConstants.EventType.COMPLETE_CHECKLIST_INSTANCE,
String.valueOf(checklistInstance.getId()), TaskConstants.EventCreator.TASK_STATUS_UPDATOR, taskMap);
}
희망. 이제 X와 Y 클래스 함수를 대체하지 않고 어떻게 재 설계 할 수 있습니까? 클래스 z는 피할 수 있습니다.
우리가 당신의 결함이 어디 있는지 알 수 있도록 정확한 코드를 보여주십시오. –
순환 의존성이 없도록 코드를 재정렬하십시오. 순환 종속성을 갖는 것은 설계에서 무언가 잘못되었다는 신호이며 클래스 간의 결합이 너무 빡빡합니다. – Jesper
@ OlivierGrégoire done. –