Java 如何在SpringMVC无状态应用程序(没有DB)中实现服务层?

Java 如何在SpringMVC无状态应用程序(没有DB)中实现服务层?,java,spring,spring-mvc,model-view-controller,Java,Spring,Spring Mvc,Model View Controller,有一个应用程序接收一些输入参数,进行一些计算并返回结果(如web服务),而不需要持久性层。下面是我需要的一个非常简单的例子 假设我在模型层中有一个实体圆: 以及控制器层中的CircleController: 在某些视图中,应用程序接受用户提供的参数(在本例中仅为radius),并返回结果,比如说,square和periment。计算这些值的算法有: public static double calculateSquare(Circle circle) { return Math.PI *

有一个应用程序接收一些输入参数,进行一些计算并返回结果(如web服务),而不需要持久性层。下面是我需要的一个非常简单的例子

假设我在模型层中有一个实体

以及控制器层中的
CircleController

在某些视图中,应用程序接受用户提供的参数(在本例中仅为
radius
),并返回结果,比如说,
square
periment
。计算这些值的算法有:

public static double calculateSquare(Circle circle) {
    return Math.PI * circle.getRadius() * circle.getRadius();
}

public static double calculatePerimeter(Circle circle) {
    return 2 * Math.PI * circle.getRadius();
}
遵循最佳实践,我希望保持结构干净,并由所有逻辑层(例如,数据库、dao、服务、控制器等)分隔开来。
我想在控制器和模型之间添加一个服务层,例如
com.example.Service.CircleService

如果我有一个持久性层,我将实现存储库层,将
CircleRepository
对象注入服务层,并将其作为我的业务逻辑,最后将这个
CircleService
对象注入我的控制器层。但在这种情况下,事情应该会容易些


在Spring MVC应用程序中实现这种设计以实现最佳可用性、灵活性、可测试性、可扩展性和代码可读性的最有效方法是什么?

这正是我所好奇的。你找到答案了吗?@hama没有得到关于最佳实践的答案。但实际上在那个时候,我使用了一个带有GET方法的控制器,在那里我用BindingResult验证了表单,并用业务逻辑/算法调用了服务层。然后,我将结果返回给控制器,将其(以及一些其他属性)添加到ModelMap中,并将这些值传递给使用Thymeleaf渲染视图。只是MVC。这正是我所好奇的。你找到答案了吗?@hama没有得到关于最佳实践的答案。但实际上在那个时候,我使用了一个带有GET方法的控制器,在那里我用BindingResult验证了表单,并用业务逻辑/算法调用了服务层。然后,我将结果返回给控制器,将其(以及一些其他属性)添加到ModelMap中,并将这些值传递给使用Thymeleaf渲染视图。只是MVC。
package com.example.controller;
// imports

@Controller
public class CircleController {

    @RequestMapping(value = "/circle")
    public String circleDetails(Model model) {
        model.addAttribute("circle", new Circle());
        return "circle_form";
    }

    @RequestMapping(value = "circleResult", method = RequestMethod.POST)
    public String calcCircleDetails(Circle circle, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "circle_form";
        }
        return "circle_result";
    }
}
public static double calculateSquare(Circle circle) {
    return Math.PI * circle.getRadius() * circle.getRadius();
}

public static double calculatePerimeter(Circle circle) {
    return 2 * Math.PI * circle.getRadius();
}