如何在SpringMVC-Java中正确使用三层架构

如何在SpringMVC-Java中正确使用三层架构,java,spring,model-view-controller,service,layer,Java,Spring,Model View Controller,Service,Layer,我带着困惑来到你们面前,也许你们可以向我澄清 我现在正在学习如何在Spring MVC中使用三层体系结构(使用存储库、服务、控制器),但我不了解以下内容以及应该如何做: -服务层,在这里,我不理解,接口中定义的方法应该与JPA提供给我们的方法相同,或者在该实体上定制的方法相同(产品,例如,使用getBrand等方法),或者我们应该为每个实体使用什么方法,我们如何知道使用什么 -从发现的示例中观察到的另一件事是,对于服务中的产品实体,使用了一个新的类ProductData,拥有我们愿意看到的实例,

我带着困惑来到你们面前,也许你们可以向我澄清

我现在正在学习如何在Spring MVC中使用三层体系结构(使用存储库、服务、控制器),但我不了解以下内容以及应该如何做:

-服务层,在这里,我不理解,接口中定义的方法应该与JPA提供给我们的方法相同,或者在该实体上定制的方法相同(产品,例如,使用getBrand等方法),或者我们应该为每个实体使用什么方法,我们如何知道使用什么

-从发现的示例中观察到的另一件事是,对于服务中的产品实体,使用了一个新的类ProductData,拥有我们愿意看到的实例,这样做可以吗,还是留在我们的实体中?如果是,在服务方法中,我们应该使用ProductData而不是Product entity? 例如:

-如果我们在服务中使用ProductData,我们也应该在控制器中使用它,对吗

-例如,在MVC中,实用程序类的用途是什么,何时以及如何使用它们


感谢耐心和帮助,我一直在谷歌上搜索这些东西,但我没有找到任何结论,只是个人喜好…

存储库层负责处理数据库和应用程序之间的通信。您可以在这里加载、保存、删除或更新您的实体。那很容易

服务层负责业务逻辑。在简单的情况下,它可能看起来像是contoller和repository之间的代理,但假设您必须加载产品,然后计算每个产品的价格,调用另一个web服务获取产品中的图片,并将其全部放在一起作为响应发送回客户机

因此,这里的正确方法取决于您的需求

大多数情况下(除了简单的例子),您必须提供复杂的数据。 因此,您不能只返回简单的实体,而是一个组合对象

另一件事是,如果返回实体,它会将整个数据库结构返回给客户端(id、审核字段等),这是一个巨大的安全问题。因此,如果需求发生变化,组合对象更安全,也更容易在将来修改应用程序


实用程序类只是助手。当您有一些公共逻辑并且它不能封装到超类中时,您可以使用它。例如,转换日期,检查字符串的可空性和空性…等等

WOO,谢谢你的回答,这会让sanse知道。因此,我们可以使用一个组合对象,而不是实体对象,其中包含实体中的文件(我们希望公开的文件,如姓名、电子邮件,但不包括idk、家庭等)。通常,来自服务的方法是我们需要在控制器中返回的方法,对吗?现在,我需要了解如何从实体到组合对象进行“转换”,因为如果我有一个列表和一个列表,我会出错,但现在只需要处理示例,非常感谢!!!^^祝你今天愉快
public ProductData findById(Integer id){
        ProductEntity product = productRepo.findById(id);
        ProductData data = new ProductData(product.getId(), product.getName(), product.getCeva());
        return data;}