Как организовать классы для приложения Angular?

Каков наиболее профессиональный способ обработки ответа API с использованием классов TypeScript, JavaScript, Java или чего-то еще?

Например, приложению нужно три ресурса:

  • Аккаунт (API: / account /: id)
  • Автомобиль (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 только основные данные ресурса.

Итак, должны ли ресурсы всегда быть вложенными по всему приложению и вызывать только один раз, или классы ресурсов должны существовать и перезагружаться независимо друг от друга в приложении? Какой способ используют профессиональные программисты?

Зачем вообще нужно создавать классы? Какое поведение вы намереваетесь добавить к ним? Если вы не собираетесь добавлять методы, классы на самом деле не нужны; вам лучше определить интерфейсы TypeScript для ресурсов.

cartant 15.06.2018 09:00

Содержание вашего вопроса не имеет ничего общего с организацией классов Angular. Вы спрашиваете о дизайне API; ваши классы / интерфейсы DTO в Angular должны отражать то, что вы получаете от бэкэнда.

jonrsharpe 15.06.2018 09:19

Это слишком неоднозначно. При проектировании вы также должны учитывать, как вы хотите использовать данные и насколько большими могут быть наборы данных в одном обращении. Вложенность подходит для небольших наборов данных, но вы не захотите делать это таким образом, если наборы данных всегда большие (подумайте о сетевом трафике, а затем умножьте на количество пользователей, которые, вероятно, будут использовать ваш сайт).

bilpor 15.06.2018 09:29

Это всего лишь мнение. Мне нравится, что тяжелая работа выполняется на сервере (а не на клиенте), поэтому моим первым подходом будет возвращение вложенных классов API. Но вам может потребоваться в вашем приложении видеть все автомобили или всех водителей. В зависимости от размера данных будет иметься служба, в которую вложены классы. Ну, мы говорим о классах (используйте интерфейс, потому что вам не нужен метод объекта, а только данные)

Eliseo 15.06.2018 09:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
177
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Класс не подходит для объявления типа, представляющего ответ HTTP. Вместо этого используйте интерфейс или тип

Из руководства по стилю Angular

Consider using an interface for data models

Angular 4.3 представил новый более простой способ обработки запросов http с помощью библиотеки HttpClient.

You can tell HttpClient the type of the response to make consuming the output easier and more obvious. All you need to do is define an interface for the shape of the response and type-check against that interface:

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

    // ...

    constructor(private http: HttpClient) {}

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

}

So should resources always be nested over the complete application and called up only at one time, or should the resource classes exist and be reloaded independently of each other in the application? Which way is used by professional programmers?

Это полностью зависит от вашего варианта использования

Другие вопросы по теме