Angular 2 (ng2) — сервис против утилиты, когда какой использовать?

#angular

#angular

Вопрос:

После просмотра множества различных сообщений на форумах и примеров проектов люди, похоже, выбирают между сервисом или утилитой для одного и того же типа функциональности. До сих пор я читал, что люди говорят, что сервисы лучше из-за внедрения зависимостей, что упростит тестирование. Другие говорят, что утилиты лучше, потому что они быстрее. Мне было интересно, существует ли какое-либо предпочтительное правило относительно того, когда использовать сервис против утилиты и почему?

Вот пример, который извлекает столбцы таблицы из загруженных данных:

Обслуживание

 export class TableService {
  getColumns(data:Array<any>):Array<GridColumnInterface> {
    let columns:Array<GridColumnInterface> = [];

    data.forEach((column:any, index:number) => {
      columns.push({
        headerName: column.name,
        field: String(index),
        hide: column.isHidden,
        class: 'text-center'
      });
    });

    return columns;
  }
}
  

Утилита

 export class TableUtil {
  static getColumns(data:Array<any>):Array<GridColumnInterface> {
    let columns:Array<GridColumnInterface> = [];

    data.forEach((column:any, index:number) => {
      columns.push({
        headerName: column.name,
        field: String(index),
        hide: column.isHidden,
        class: 'text-center'
      });
    });

    return columns;
  }
}
  

Итак, что бы вы выбрали и почему?

Комментарии:

1. В качестве примера можно привести не сервис против утилиты, а статические методы против методов экземпляра. Оба класса могут быть сделаны вводимыми или нет. Если вы понятия не имеете, как вы будете использовать и тестировать что-то, DI — безопасный выбор.

Ответ №1:

Если вы заботитесь о ремонтопригодности и тестируемости, используйте сервис.

Если вы сталкиваетесь с ситуациями, когда профилирование показывает, что использование сервиса отнимает значительное количество ресурсов процессора, затем переключитесь на util-класс и выполните тесты, чтобы получить правильные цифры, насколько быстрее ваше приложение работает с util-классами. Если это имеет значение в вашем приложении (что маловероятно, кстати), измените этот класс сервиса на util-class. Я бы счел все остальное преждевременной оптимизацией.

Я уверен, что, когда вы сможете уменьшить количество запросов, которые ваше приложение отправляет на ваш сервер, это внесет больший вклад в пользовательский интерфейс вашего приложения, чем вы когда-либо сможете сделать с помощью service vs util.

Angular2 AoT в любом случае преобразует код DI в статический код, поэтому нет большого потенциала для повышения производительности.