使弹簧靴和角度应用程序之间的模型保持同步。备择方案?
Posted
技术标签:
【中文标题】使弹簧靴和角度应用程序之间的模型保持同步。备择方案?【英文标题】:Keeping models between spring boot and angular application in sync. Alternatives? 【发布时间】:2018-02-12 17:00:21 【问题描述】:在带有 spring-boot 和 angular 的客户端-服务器应用程序中。我发现的大多数资源都解释了如何从 Spring Boot 中公开 REST 端点并使用 http 客户端从 Angular 中使用它。
大多数时候,以 JSON 进行通信是预先确定的,在 Angular 和 Spring Boot 端维护 DTO(DataTransfertObject)。
我想知道有全栈经验的人是否知道一些替代方法,避免在前端和后端维护 DTO,也许在应用程序的两端共享模型?
【问题讨论】:
【参考方案1】:Swagger 将是在这里使用的好工具。
您可以采用代码优先的方法,从您的 Java 控制器和 TO 生成一个 swagger 规范,或者采用规范优先的方法,从一个 swagger 规范生成您的 Java 控制器和 TO。
无论哪种方式,您都可以使用 swagger 规范为客户端生成一组 TypeScript 接口。
【讨论】:
【参考方案2】:这是一个困难的话题,因为我们要处理两种不同的技术堆栈。我看到的唯一方法是从通用数据模型生成这些对象。
【讨论】:
【参考方案3】:正如 Pace 所说,Swagger 将是您可以使用的一个很棒的功能。在这种情况下,再加上 API 端点的 documentation 很好,您可以在前端和后端之间同步对象模型。您只需使用 Swagger 的 .json
或 .yaml
文件即可使用 ng-swagger-gen 在前端生成服务和对象模型。
然后,当您想构建或运行您的应用程序时,将生成服务和对象模型的命令放在package.json
中:
...
"scripts":
...
"start": "ng-swagger-gen && ng serve",
"build": "ng-swagger-gen && ng build -prod"
...
,
...
因此,在运行这些命令之一后,您将更新对象模型,如果对象属性名称或类型发生更改,添加/删除对象属性您将收到错误,您必须先修复它然后继续。
注意:请记住,服务和对象模型将基于 Swagger 文件生成,因此应始终对其进行更新。
PS:我正在做一个项目,我们甚至后端的每个代码都是基于 Swagger 文件生成的;)所以他们只需更改 Swagger 文件就可以了。
【讨论】:
【参考方案4】:听起来不错,但不起作用。这不仅仅是维护 dto。 假设 api 将 String 更改为 List。将您的 typescript dto 从 string 更新为 string[] 是不够的。字符串操作背后的逻辑现在需要处理字符串列表。就我个人而言,我觉得在双方都维护 dto 并不麻烦。灵活性和更简洁代码的小折衷(您将在不同的 dto 中使用不同的方法)
【讨论】:
以上是关于使弹簧靴和角度应用程序之间的模型保持同步。备择方案?的主要内容,如果未能解决你的问题,请参考以下文章
当角靴和弹簧靴捆绑在一次战争中并部署在tomcat上时,是否需要proxy.conf.json文件
我的观点似乎没有看到我的 css,js。我正在使用弹簧靴和百里香叶