#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 в статический код, поэтому нет большого потенциала для повышения производительности.