elo, może ktoś mi coś fajnego podpowie.
Mam w kodzie batchowy update, leci forem po kolekcji, robi ciąg walidacji, jeśli nie zwaliduje, wrzuca wiadomość i pomija dalsze wykonywania kodu w iteracji:
for (Czesc entry : batch) {
Set<String> duplicatedParts = findDuplicatedParts(entry);
if (!duplicatedParts.isEmpty()) {
updateResult.addMessage(messageCreator.createDuplicatedPartsMessage(String.join(", ", duplicatedParts)));
continue;
}
final ObjectKey czescKey = lookupPart(entry.getCzescValue());
if (czescKey == null) {
updateResult.addMessage(messageCreator.createValueNotFoundMessage("Część", entry.getCzescValue()));
continue;
}
final EditableReferableObject czescInstance = structuredEditingSession.checkoutReferableObject(czescKey);
if (isPartNotCzesc(czescInstance)) {
LOGGER.info("Part is not Czesc" + czescKey);
updateResult.addNotUpdatedEntry(czescKey, messageCreator.createNotCzescMessage(czescKey));
continue;
}
final ObjectKey eco = lookupEco(entry.getEco());
if (eco == null) {
LOGGER.info("Eco doesn't exist: " + entry.getEco());
updateResult.addNotUpdatedEntry(czescKey, messageCreator.createValueNotFoundMessage("Eco", entry.getEco()));
continue;
}
final boolean updated = updateCableHarness(czescInstance, entry, eco);
// wrzuc do bazki cokolwiek
}
Chętnie bym to wszystko wyekstraktował jakoś ładnie, ale jak skipnąć wtedy iteracje po pierwszy failu walidacji? Istnieje jakiś fajny wzorzec nazwany na to?
Do tego każde załadowanie dodatkowych (np. wywołanie lookupPart, checkoutReferableObject, lookupEco) powinno odbyć się później, po każdej kolejnej walidacji, bo jest dość kosztowne i nie chcemy ładować wszystkiego od razu.