java中正确使用三层架构

mlmc2os5  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(280)

我带着困惑来到你面前,也许你可以向我澄清。
我现在正在学习如何在spring mvc中使用三层体系结构(使用存储库、服务、控制器),但我不明白以下几点以及我应该如何做:
-服务层,在这里,我不明白,接口中定义的方法应该与jpa提供给我们的方法相同,或者在那个实体上定制的方法(比如产品,带有getbrand等的方法),或者我们应该为每个实体使用什么方法,我们怎么知道该使用什么?
-从发现的示例中观察到的另一件事是,对于一个产品实体,在服务中,使用了一个新类productdata,拥有那些我们愿意看到的示例,这样做还是留在我们的实体中?如果是,在服务方法中,我们应该使用productdata而不是productentity?例子:

public ProductData findById(Integer id){
        ProductEntity product = productRepo.findById(id);
        ProductData data = new ProductData(product.getId(), product.getName(), product.getCeva());
        return data;}

-如果我们在服务中使用productdata,我们也应该在控制器中使用它,对吗?
-例如,在mvc中,实用程序类的用途是什么,何时以及如何使用它们?
感谢你的耐心和帮助,我一直在谷歌上搜索这些东西,但我没有找到任何结论,只是个人喜好。。。

isr3a4wc

isr3a4wc1#

存储库层负责处理数据库和应用程序之间的通信。您可以在这里加载、保存、删除或更新您的实体。那很简单。
服务层负责业务逻辑。在简单的情况下,它看起来像是控制器和存储库之间的代理,但是假设您必须加载产品,然后计算每个产品的价格,调用另一个web服务获取产品中的图片,并将这些图片放在一起作为响应发送回客户机。
因此,这里的正确方法取决于您的要求。
大多数情况下(除了简单的例子),您必须提供复杂的数据。因此,您不能只返回简单实体,而是一个组合对象。
另一件事是,如果返回实体,它会将整个数据库结构返回给客户机(id、审计字段等),这是一个巨大的安全问题。因此,如果需求发生变化,组合对象更安全,也更容易在将来修改应用程序。
实用程序类只是助手。当您有一些公共逻辑并且它不能封装到超类中时,您可以使用它。例如,转换日期,检查字符串是否为空等等

相关问题