Javascript 如何组织角度应用程序的类?

Javascript 如何组织角度应用程序的类?,javascript,angular,api,class,structure,Javascript,Angular,Api,Class,Structure,使用TypeScript、JavaScript、Java或其他类型的类处理API响应的最专业的方法是什么 例如,应用程序需要三个资源: 帐户API:/Account/:id 汽车API:/account/:id/cars/[:id] 驱动程序API:/account/:id/cars/:id/drivers 每个账户都有一辆或多辆车,每辆车都有一个或多个司机 我在应用程序中看到了两种处理这些资源的方法: 为每个ressource帐户、汽车、驾驶员创建一个类并嵌套它。例如 在这种情况下,API将返

使用TypeScript、JavaScript、Java或其他类型的类处理API响应的最专业的方法是什么

例如,应用程序需要三个资源:

帐户API:/Account/:id 汽车API:/account/:id/cars/[:id] 驱动程序API:/account/:id/cars/:id/drivers 每个账户都有一辆或多辆车,每辆车都有一个或多个司机

我在应用程序中看到了两种处理这些资源的方法:

为每个ressource帐户、汽车、驾驶员创建一个类并嵌套它。例如

在这种情况下,API将返回一个已经嵌套的JSON响应,只需请求一次数据

为每个资源创建一个类,但不要嵌套它。首先,在调用/account/1234时仅获取帐户数据,然后在应用程序生命周期的后期,根据需要获取驱动程序和车辆

class Account {
  constructor(
    public id: number,
    public name: string,
    public age: number
  ) {}
}

class Car {
  constructor(
    public id: number,
    public type: string,
    public seats: number
  ) {}
}
在这种情况下,API将仅为每个API调用返回主资源数据

那么,资源应该总是嵌套在整个应用程序上,并且只在一次调用,还是应该存在资源类,并在应用程序中彼此独立地重新加载?专业程序员使用哪种方式

从角度样式指南

考虑为数据模型使用接口

Angular 4.3引入了使用HttpClient库处理http请求的新方法

您可以告诉HttpClient要执行的响应类型 输出更容易和更明显。 您只需为响应的形状定义一个接口,并根据该接口进行类型检查:

因此,资源是否应该始终嵌套在整个应用程序上 只能一次调用,或者资源类是否存在并 是否在应用程序中彼此独立地重新加载?专业程序员使用哪种方式


这完全取决于您的用例

为什么首先需要创建类?你打算给他们增加什么样的行为?如果您不打算添加方法,那么实际上并不需要这些类;您最好为资源定义TypeScript接口。您的问题内容与类组织无关。你要问的是API设计;在Angular中,您的DTO类/接口应该反映您从后端获得的内容。这是不明确的。在设计时,还必须考虑如何使用数据,以及数据集在一次命中时可能有多大。嵌套在小数据集上是可以的,但如果数据集总是很大,你就不想这样做。想想网络流量,然后乘以可能使用你网站的用户数量。这只是一种意见。我喜欢在服务器上而不是在客户机上进行的艰苦工作,因此,我的第一个建议将是API返回嵌套类。但您可以在应用程序中查看所有汽车或所有驾驶员。根据数据的大小,将有一个嵌套类的服务。我们讨论的是类使用接口,因为不需要对象的方法,只需要数据
class Account {
  constructor(
    public id: number,
    public name: string,
    public age: number
  ) {}
}

class Car {
  constructor(
    public id: number,
    public type: string,
    public seats: number
  ) {}
}
    interface Post {
      title: string;
      body: string;
    };

    // ...

    constructor(private http: HttpClient) {}

    getData() {
      this.http.get<Post>(this.url).subscribe(res => {
        this.postTitle = res.title;
      });

}