Spring Webflux — Как преобразовать нижеприведенный код в реактивный дружественный способ?

#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, вы должны сначала убедиться, что ваш репозиторий является реактивным (он не должен блокировать и возвращать поток), в противном случае «преобразование в реактивный», вероятно, означает не то, что вы думаете.