我是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这样的代码生成工具,但有兴趣听听是否有其他人遇到过同样的问题以及他们是如何处理它的。
答案 0 :(得分:1)
关于这是否违反DRY原则,有两种思想流派。如果你真的确实确定有一个自然的映射,你总是会在每种语言中使用绑定json,那么你可以说它是重复的工作;这是CORBA等技术中IDL类型语言背后的思想(至少是其中的一部分)(但我正在展示我的年龄)。
OTOH也许每个系统(服务器,客户端,备用客户端,如果有人写一个)应该可以自由地独立定义最适合该系统的对象的内部表示(给定它的语言,它的计划做,等等。)。
在您的示例中,typescript当然不包含定义Java“等效”所需的所有信息。 ('数字'可以映射到很多东西;并且打字稿没有说明访问修饰符......)当然你可以通过采用约定来缩小范围,但我的观点是,有一个不明确的是1对1映射。
也许一种语言比另一种语言更优雅地处理引用。也许一个人不能处理循环引用,但另一个可以。也许人们有理由更喜欢对象的更平坦的视图。也许很多事情。
所有这些说明,如果你修改一个对象的json结构,并且你是独立维护每个系统的内部表示,那么你可能必须在多个地方进行代码更改以适应那个单独的底层更改。实际上,如果可以避免这是件好事。
因此,如果您能够提出一个代码生成器来处理更具表现力的语言表示,以便为表达能力较弱的语言创建表示,并且至少在默认情况下使用它,您可能会发现它对您的项目来说并不是一件坏事