Вы можете использовать стратегию для инкапсуляции работы. Реализуйте его один раз для обычных вещей и один раз для каждой особой ситуации.
Начните с отделения обработки вашего запроса от вашей бизнес-логики. Вот некоторый код:
@RestController
public class KapowController
{
private final KapowService kapowService;
public KapowController(final KapowService kapowServiceValue)
{
kapowService = kapowServiceValue;
}
@PostMapping(value = "/getBooks/{bookId}/{bookAction}"
public ResponseEntity<BlamType> performBookAction(
@PathVariable("bookId") final String bookId,
@PathVariable("bookAction") final String bookAction)
{
final BlamType result;
// in this case, validate bookid and bookAction in the service.
result = kapowService.performBookAction(bookId, bookAction);
return ResultEntity.status(HttpStatus.OK).body(result);
}
}
@Service
public class KapowService
{
public BlamType performBookAction(
final String bookId,
final String bookAction)
{
// do stuff.
}
}
Далее, вы можете использовать стратегию для выполнения обычных и специальных задач. Вот некоторый код:
public interface BookActionStrategy
{
BlamType doStuff(BlamType blamType, String bookId, BookAction bookAction);
}
@Component
public class BookActionNormal implements BookActionStrategy
{
public BlamType doStuff(
final BlamType blamType,
final String bookId,
final BookAction bookAction)
{
// do normal stuff.
// maybe conditionally based on the BookAction.
// do something meaningful with blamType.
return blamType;
}
}
@Component
public class BookActionSpecial implements BookActionStrategy
{
public BlamType doStuff(
final BlamType blamType,
final String bookId,
final BookAction bookAction)
{
// do special stuff based on the BookAction.
// do something meaningful with blamType.
return blamType;
}
}
Внедрение List
стратегии в сервис
final List<BookActionStrategy> bookActionStrategyList;
KapowService(final List<BookActionStrategy> bookActionStrategyListValue)
Наконец, вызовите каждую стратегию в методе KapowService.performBookAction
.