#30 Рефакторинг stateful сервиса в stateless
Сделать рефакторинг кода:
@RestController
@RequestMapping(path = "/contract")
public class ContractController {
private final ContractRepository repository;
private final ContractService contractService;
public ContractController(ContractRepository repository, ContractService contractService) {
this.repository = repository;
this.contractService = contractService;
}
@PostMapping(path = "/{contractId}/price")
public void updatePrice(@PathVariable Long contractId) {
Contract contract = repository.findById(contractId).orElseThrow();
contractService.setContract(contract);
contractService.updatePrice();
}
}
@Service
public class ContractService {
private final PriceService priceService;
private Contract contract;
public ContractService(PriceService priceService) {
this.priceService = priceService;
}
public void setContract(Contract contract) {
this.contract = contract;
}
public void updatePrice() {
if (contract != null) {
BigDecimal price = priceService.calcPrice(contract);
contract.setPrice(price);
}
}
}
class Contract {
private BigDecimal price;
public BigDecimal getPrice() {
return this.price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору