3

我是一名 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这样的代码生成工具,但很想知道是否有其他人遇到过同样的问题以及他们是如何解决的。

4

1 回答 1

1

关于这是否违反 DRY 原则有两种观点。如果您真的非常确定在每种语言中总是有一个自然映射来绑定 json,那么您可以说它是重复的工作;这是 CORBA 等技术中 IDL 类型语言背后的(至少部分)思考(但我正在展示我的年龄)。

OTOH 也许每个系统(服务器,客户端,如果有人要编写一个备用客户端)应该可以自由地独立定义最适合该系统的对象的内部表示(考虑到它的语言,它计划做什么, ETC。)。

在您的示例中,打字稿当然不包含定义Java“等效”所需的所有信息。(“数字”可以映射到很多东西;并且打字稿没有说明访问修饰符......)当然,您可以通过采用约定来缩小范围,但我的观点是存在一个不言而喻的一对一映射。

也许一种语言比另一种语言更优雅地处理引用。也许一个不能处理循环引用,但另一个可以。也许人们有理由更喜欢对象的更平面视图。也许很多东西。

综上所述,如果您修改一个对象的 json 结构,并且您要独立维护每个系统的内部表示,那么您可能必须在多个位置进行代码更改以适应单个底层更改。从务实的角度来看,如果可以避免这种情况,那是一件好事。

因此,如果您能想出一个代码生成器来处理更具表现力的语言的表示来为表现力较差的语言创建一个表示,并且可能至少默认使用它,您可能会发现这对您的项目来说并不是一件坏事。

于 2017-01-19T16:27:44.360 回答