如何组织Angular应用程序的类?

时间:2018-06-15 06:53:54

标签: javascript angular api class structure

使用TypeScript,JavaScript,Java或其他类中的类来处理API响应的最专业方法是什么?

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

  • 帐户(API:/ account /:id)
  • Car(API:/ account /:id / cars / [:id])
  • 驱动程序(API:/ account /:id / cars /:id / drivers)

每个帐户都有一个或多个汽车,每个汽车都有一个或多个广告

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

  1. 为每个资源(帐户,汽车,司机)创建一个类并将其嵌套。例如。

    class Account {
      constructor(
        public id: number,
        public name: string,
        public age: number
        public cars: Car[]
      ) {}
    }
    
    class Car {
      constructor(
        public id: number,
        public type: string,
        public seats: number
        public drivers: Driver[]
      ) {}
    }
    

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

  2. 为每个资源创建一个类,但不要嵌套。首先只获取帐户数据(调用/ 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调用仅返回主资源数据。

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

1 个答案:

答案 0 :(得分:1)

A class is unsuitable for declaring a type that represents an HTTP response. Use interface or type instead

来自Angular Style Guide

  

考虑使用数据模型的接口

Angular 4.3引入了一种更简单的方法来处理http库的HttpClient请求

  

您可以告诉HttpClient要进行消费的响应类型   输出更容易,更明显。   您需要做的就是为响应的形状定义一个接口,并针对该接口进行类型检查:

    interface Post {
      title: string;
      body: string;
    };

    // ...

    constructor(private http: HttpClient) {}

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

}
  

所以资源总是嵌套在整个应用程序上   只在一次调用,或者资源类是否存在和   在应用程序中彼此独立重新加载?专业程序员使用哪种方式?

完全取决于您的用例