识别SpringMVC架构模式

识别SpringMVC架构模式,spring,model-view-controller,architecture,Spring,Model View Controller,Architecture,我正在看一个SpringMVC视频系列,我很喜欢它 我想了解更多关于所使用的确切体系结构的细节,但在识别正确的名称时遇到了困难,因此我可以进一步阅读 例如,我知道表示层是MVC,但并不确定如何更具体地描述服务和资源对象的使用模式,而不是选择使用服务、DAO和域对象 有什么线索可以帮助我更好地将搜索重点放在理解下面的布局上 application core models/entities services rest controllers re

我正在看一个SpringMVC视频系列,我很喜欢它

我想了解更多关于所使用的确切体系结构的细节,但在识别正确的名称时遇到了困难,因此我可以进一步阅读

例如,我知道表示层是MVC,但并不确定如何更具体地描述服务和资源对象的使用模式,而不是选择使用服务、DAO和域对象

有什么线索可以帮助我更好地将搜索重点放在理解下面的布局上

application
  core
     models/entities
     services
  rest
     controllers
     resources
        resource_assemblers
编辑:
Nathan Hughes的评论澄清了我对命名法的困惑,SirKometa将我没有掌握的建筑点联系起来。谢谢各位

我猜您正在寻找的体系结构模式是代表性状态转移(REST)。你可以在这里阅读:

在REST中,传递的数据称为资源:

资源识别: 在请求中标识单个资源,例如在基于web的REST系统中使用URI。资源本身在概念上与返回给客户机的表示分离。例如,服务器可能会以HTML、XML或JSON的形式从其数据库发送数据,这些数据都不是服务器的内部表示形式,而且不管怎样,它们都是同一个资源


据我所知,您提到的布局代表了通过REST服务与世界通信的应用程序

  • core
    package表示与视图无关的所有类(域、服务、存储库)
  • 模型
    包-假设您针对的是典型的应用程序,您确实有一个表示您的数据的
    模型/域/实体
    包,例如:
  • repository
    package-由于您使用的是Spring,您很可能也会使用
    Spring数据
    甚至
    Spring数据jpa
    Hibernate
    作为ORM库。它很可能会引导您使用
    存储库
    界面(您观看的视频的作者出于某种原因决定不使用它)。无论如何,它将是您访问数据库的层,例如:
  • 服务
    软件包将是您处理数据的软件包。这不是最好的例子,但该层不直接访问您的数据库,它将使用存储库来执行此操作,但它也可以执行其他操作—它将是您在应用程序中操作数据的API。假设您想在将钱包保存到DB之前对其进行一次奇特的计算,或者像这里一样,您想确保您尝试创建的博客还不存在
  • controllers
    包包含所有类,这些类将被
    dispatcherservlet
    用来处理请求。您将从请求中读取“输入”,处理它(在此处使用您的
    服务
    )并发送您的响应
    
  • resource\u汇编程序
    本例中的包是特定于框架的(
    Hateoas
    )。据我所知,这只是一个用于json响应的DTO(例如,您可能希望在
    帐户中存储密码,但通过json公开密码不是一个好主意,如果您不使用DTO,就会发生这种情况)
    
请让我知道这是否是你想要的答案

您可能也感兴趣

在每种情况下,您谈论的大多是相同的事情,Spring只是使用注释,以便在扫描它们时,它知道您正在创建或实例化什么类型的对象

基本上,所有请求都通过带有注释的控制器。每个方法处理请求,并(如果需要)调用特定的服务类来处理业务逻辑。这些类用注释。控制器可以通过在@Autowire中自动连接这些类或在@Resource中为它们配置资源来实例化这些类

@Controller
@RequestMapping("/")
public class MyController {

    @Resource private MyServiceLayer myServiceLayer;

    @RequestMapping("/retrieveMain")
    public String retrieveMain() {

        String listOfSomething = myServiceLayer.getListOfSomethings();
        return listOfSomething;
    }
}
然后,服务类执行其业务逻辑,如果需要,从带有注释的存储库类检索数据。服务层以相同的方式实例化这些类,或者自动连接它们,或者为它们提供资源

@服务
公共类MyServiceLayer实现MyServiceLayerService{
@资源私有MyDaoLayer MyDaoLayer;
公共字符串getListOfSomethings(){
List listOfSomething=myDaoLayer.getListOfSomethings();
//业务逻辑
某物的返回列表;
}
}
存储库类构成了DAO,Spring对它们使用@repository注释。实体是@Repository层接收的单个类对象

@Repository
public class MyDaoLayer implements MyDaoLayerInterface {

    @Resource private JdbcTemplate jdbcTemplate;

    public List<String> getListOfSomethings() {

        // retrieve list from database, process with row mapper, object mapper, etc.
        return listOfSomething;
    }
}
@存储库
公共类MyDaoLayer实现MyDaoLayerInterface{
@资源私有JdbcTemplate JdbcTemplate;
公共列表getListOfSomethings(){
//从数据库中检索列表,使用行映射器、对象映射器等进行处理。
某物的返回列表;
}
}
@存储库、@Service和@Controller是的特定实例。所有这些层都可以用@Component进行注释,最好按实际情况命名


因此,为了回答您的问题,它们的意思是相同的,它们只是被注释以让Spring知道它正在实例化什么类型的对象和/或如何包含另一个类。

您能稍微扩展一下您的意思吗描述用于说明服务和资源对象的使用的模式,而不是选择使用服务、DAO和域对象"? 在春季,您仍然使用服务、DAO和域对象。我想我正在努力更好地理解不同的命名方案。我看到一些人提到实体和DAO,而另一些人使用存储库或资源之类的名称。似乎有不同的方法来实现des
@Repository
public class MyDaoLayer implements MyDaoLayerInterface {

    @Resource private JdbcTemplate jdbcTemplate;

    public List<String> getListOfSomethings() {

        // retrieve list from database, process with row mapper, object mapper, etc.
        return listOfSomething;
    }
}