【问题标题】:How to properly use 3 - layers architerchture in Spring MVC - Java如何在 Spring MVC 中正确使用 3 层架构 - Java
【发布时间】:2020-12-14 20:00:26
【问题描述】:

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

我现在正在学习如何使用 Spring MVC 的 3 层架构(使用 Repository、Service、Controllers),但我不明白以下内容以及我应该如何去做:

-服务层,这里,我没看懂,接口中定义的方法应该和JPA给我们的或者在那个实体上自定义的方法一样(比如Product,使用 getBrand 等方法)或者我们应该为每个实体使用什么方法,我们怎么知道该使用什么?

-从找到的示例中观察到的另一件事是,对于 Product 实体,在 Service 中使用了一个新类 ProductData,具有我们愿意查看的那些实例,是否可以这样做或继续使用我们的实体?如果是,在服务方法中,我们应该使用 ProductData 而不是 Product 实体? 示例:

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

-如果我们在Service中使用ProductData,我们也应该在controller中使用它,对吧?

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

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

【问题讨论】:

    标签: java spring model-view-controller service layer


    【解决方案1】:

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

    服务层负责业务逻辑。在简单的情况下,它可能看起来像是控制器和存储库之间的代理,但假设您必须加载产品然后计算每个产品的价格,调用另一个 Web 服务以获取产品图片并将它们放在一起发送回客户端作为响应.

    所以这里的正确方法取决于您的要求。

    大多数时候(除了简单的示例)您必须提供复杂的数据。 所以你不能只返回一个简单的实体,而是一个组合的对象。

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

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

    【讨论】:

    • WOO,谢谢你的回答,它让你知道。因此,我们可以使用组合对象而不是实体对象,其中包含来自实体的字段(我们希望公开的字段,例如姓名、电子邮件,但不包括 idk、家庭等)。通常,来自服务的方法是我们需要在控制器中返回的方法,对吧?现在,我需要了解如何从实体“转换”为组合对象,因为如果我有一个 List 和一个 List 我会出错,但现在需要处理示例,谢谢很多!!! ^^祝你有美好的一天
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2011-07-17
    • 2015-06-24
    • 2011-03-04
    相关资源
    最近更新 更多