Это объект проекта, который используется в качестве ссылки другими объектами в моем проекте:
@Entity
@Data
@RequiredArgsConstructor
@AllArgsConstructor
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@NonNull private String projectName;
@NonNull private String projectCode;
@NonNull private String description;
@NonNull private Integer resourceSize;
//other fields
}
Еще два объекта Roster
и OutsourceRequestForm
, которые копируют поля projectName
и resourceSize
из проекта Сущность при создании.
@Entity
@Data
@RequiredArgsConstructor
@AllArgsConstructor
public class Roster {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
private Long version;
@NonNull private String projectName;
@NonNull private Integer resourceSize;
//other fields
}
@Entity
@RequiredArgsConstructor
@Data
public class OutsourceRequestForm {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
private Long version;
@NonNull private String projectName;
@NonNull private Integer resourceSize;
//other fields
}
Изменение в поле resourceSize
также должно быть отражено в двух вышеуказанных сущностях. Вот лог c для этого в обновлении / вставке объектов класса обслуживания.
@Service
public class ProjectServiceImpl implements ProjectService {
@Autowired ProjectRepository projectRepo;
@Autowired ProjectWebClientService projectWebClientService;
@Autowired RosterService rosterService;
@Autowired OutsourceRequestFormService orfService;
/**
*
*/
public void updateProjectData() {
//delete existing records
projectRepo.deleteAll();
//fetch data from other server
List<Project> projectList = projectWebClientService.getProjectData();
//save project data
projectRepo.save(projectList);
// ----> need solution for below part <----
projectList.forEach(project-> {
//find rosters by projectName and update resourceSize
rosterService.updateRoster(project.getProjectName() , project.getResourceSize());
//find orf by projectName and update resourceSize
orfService.updateOrf(project.getProjectName() , project.getResourceSize());
});
}
}
Можно ли как-нибудь удалить эту часть projectList.forEach {}
из этого класса и сделать это в каком-то другом месте в лучше, так как нарушает принцип единоличной ответственности ?