我是一名 Java 开发人员,但最近开始学习 Angular2/Typescript。我以前使用过 Angular 1.x,所以我不是一个完整的菜鸟 :)
在使用 RESTful Spring Boot 后端和 Angular2 前端完成 POC 时,我注意到自己在两侧复制了很多模型对象,例如
Java对象
public class Car {
private Double numSeats;
private Double numDoors;
.....
}
现在对 Typescript 和强类型感兴趣,我会在我的前端项目中创建一个类似的对象:
export interface PersonalDetailsVO {
numSeats : number;
numDoors : number;
}
我在重复工作并不断违反这里的 DRY(不要重复自己)原则。
我想知道是否有更好的方法来解决这个问题。我在考虑像 jSweet 这样的代码生成工具但有兴趣听听是否有其他人遇到过同样的问题以及他们是如何处理的。
最佳答案
关于这是否违反 DRY 原则,有两种观点。如果您真的,真的确定有一个自然映射,您将始终应用它来绑定(bind)每种语言的 json,那么您可以说这是重复的工作;这(至少部分)是 CORBA 等技术中 IDL 类型语言背后的思想(但我暴露了我的年龄)。
OTOH 也许每个系统(服务器、客户端、备用客户端,如果有人要编写一个)应该自由地独立定义最适合该系统的对象的内部表示(给定它的语言,它计划什么做等)。
在您的示例中, typescript 当然不包含定义 Java“等效项”所需的所有信息。 ('number' 可以映射到很多东西; typescript 没有提到访问修饰符......)当然你可以通过采用约定来缩小范围,但我的观点是这并不是不言而喻的一对一映射。
也许一种语言比另一种语言更优雅地处理引用。也许一个人不能处理循环引用,但另一个人可以。也许有人有理由更喜欢对象的更平面 View 。也许很多东西。
综上所述,如果您修改对象的 json 结构,并且独立维护每个系统的内部表示,那么您可能必须在多个地方进行代码更改以适应单个底层改变。从实用的 Angular 来说,如果可以避免这种情况,那是一件好事。
因此,如果您可以想出一个代码生成器来处理表达力更强的语言的表示,从而为表达力较低的语言创建一个表示,并且至少默认使用它,您可能会发现这对您的项目来说并不是一件坏事.
关于java - DRY 原则 : Angular2/Typescript and Java back end object duplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41746585/