#kotlin #reactive-programming #spring-webflux
#kotlin #реактивное программирование #spring-webflux
Вопрос:
fun getProjectOverview(fiscalYear: Int): ProjectOverview? {
val projectList: List<Project> = projectRepo.findAllProjects(fiscalYear)
return if (projectList.isNotEmpty()) {
val totalProjects = projectList.size
val completedProjects = projectList.count { it.status == "COMPLETED" } //Add enums
val meanScheduledVariance = (projectList.sumBy { it.schedule_variance } / totalProjects)
val meanCostVariance = (projectList.sumBy { it.cost_variance } / totalProjects)
ProjectOverview(totalProjects, completedProjects, meanScheduledVariance, meanCostVariance)
} else {
null
}
}
Это бизнес-логика моего сервиса, и то, что я в настоящее время делаю в своем контроллере, приведено ниже.
Mono.justOrEmpty(projectService.getProjectOverview(fiscalYear)).toFuture()
Что я хочу сделать, так это изменить свои сервисные функции на реактивный дружественный способ. Поскольку я немного новичок в реактивном программировании, я понятия не имею, как обрабатывать бизнес-логику внутри Mono.
Комментарии:
1. Вы можете использовать
.map
для обработки бизнес-логики и переназначения на другой вывод. Но вашprojectRepo
даже реактивный? Если вы используете нереактивный вызов http / io / etc, в реактивном выполнении нет никакой пользы, вы только обремените себя сложностями в обслуживании и отладке вашего кода2. @kdev В данный момент я конвертирую репозиторий проекта в реактивный. Можете ли вы привести мне пример, как использовать map для обработки бизнес-логики и переназначения на разные выходные данные. Я действительно потерялся там.
3. @ChathuminaVimukthi как указывает kdev, вы должны сначала убедиться, что ваш репозиторий является реактивным (он не должен блокировать и возвращать поток), в противном случае «преобразование в реактивный», вероятно, означает не то, что вы думаете.