使 spring 启动和 angular 应用程序之间的模型保持同步。备择方案?

Keeping models between spring boot and angular application in sync. Alternatives?

在具有 spring-boot 和 angular 的客户端-服务器应用程序中。我找到的大多数资源都解释了如何从 spring 启动时公开 REST 端点并使用 http 客户端从 angular 使用它。

大多数时候,JSON 中的通信是预定义的,在 angular 和 spring 引导端维护 DTO (DataTransfertObject)。

我想知道有全栈经验的人是否知道一些替代方法来避免在前端和后端维护 DTO,或者在应用程序的两端之间共享模型?

这是一个很难的话题,因为我们正在处理两种不同的技术栈。我看到的唯一方法是从通用数据模型生成这些对象。

Swagger 将是一个很好的工具。

您可以采用代码优先方法,从您的 Java 控制器和 TO 生成 swagger 规范,或者采用规范优先方法,从 swagger 生成您的 Java 控制器和 TO规格

无论哪种方式,您都可以使用 swagger 规范为客户端生成一组 TypeScript 接口。

正如佩斯所说 Swagger would be a great feature that you can use. In this case plus having great documentation for the API endpoints you can sync object models between frontend and backend. You have to just use the .json or .yaml file of Swagger to generate the services and object models on the frontend side by using ng-swagger-gen。 然后将用于生成服务和对象模型的命令放在 package.json 中,当您想要构建或 运行 您的应用程序时:例如:

...
    "scripts": {
    ...
    "start": "ng-swagger-gen && ng serve",
    "build": "ng-swagger-gen && ng build -prod"
     ...
  },
...

因此,在 运行 执行这些命令之一后,您将更新对象模型,如果对象 属性 名称或类型发生更改,add/remove 对象 属性 您将收到错误,您必须先修复它,然后再继续。

注意:请记住,服务和对象模型将基于 Swagger 文件生成,因此应始终对其进行更新。

PS: 我正在做一个项目,我们甚至后端的每个代码都是基于 Swagger 文件生成的;)所以他们只是更改 Swagger 文件,仅此而已。

听起来不错,但行不通。这不仅仅是维护 dto。 假设 api 将 String 更改为 List。将您的打字稿 dto 从 string 更新为 string[] 是不够的。字符串操作背后的逻辑现在需要处理字符串列表。就我个人而言,我并不觉得维护双方的 dto 有那么麻烦。灵活性和更简洁代码的小折衷(您将在不同的 dto 中使用不同的方法)