Я читаю книгу «Изучение шрифтов» Ремо Янсена. В одном разделе автор описывает, как создать очень простую платформу MVC для проверки концепции, включая создание Model
класса, и говорит следующее:
Для модели необходимо указать URL-адрес веб-службы, которую она использует. Мы собираемся использовать декоратор класса с именем ModelSettings, чтобы установить URL-адрес службы, которая будет использоваться. Мы могли бы внедрить URL службы через ее конструктор, но считается плохой практикой вводить данные (в отличие от поведения) через конструктор класса .
Я не понимаю это последнее предложение. В частности, я не понимаю, что значит «вводить данные». Мне кажется, что почти во всех введениях в классы JavaScript с использованием упрощенных примеров данные вводятся («вводятся»?) В конструктор через его параметры. Например:
class Person {
constructor(name) {
this.name = name;
}
}
Я, конечно, считаю name
данные, а не поведение, и они повсеместно включены в этот пример в качестве параметра конструктора, и никогда не упоминается, что это плохая практика. Таким образом, я предполагаю, что неправильно понимаю что-то в приведенной выше цитате, что означает «данные» или «вводить», или что-то еще.
Ваши ответы могут включать объяснения того, когда, где, как и зачем использовать декораторы в JavaScript / TypeScript, так как я сильно подозреваю, что концепция тесно связана с пониманием, которое я ищу. Однако, что еще более важно, я хочу понять в целом, что подразумевается под внедрением данных через конструктор классов и почему это плохо.
Чтобы дать больший контекст вышеприведенной цитате, вот такая ситуация: Model
создан класс, который в этом примере будет использоваться для создания моделей фондовых бирж, одна для NASDAQ и одна для NYSE. Для каждой модели требуется путь к веб-службе или файлу статических данных, который будет предоставлять необработанные данные. В книге говорится, что для этой информации должен использоваться декоратор, а не параметр конструктора, что приводит к следующему:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Я просто не понимаю, почему я должен добавить URL службы через декоратор, а не просто как параметр для конструктора, например
constructor(metiator : IMediator, serviceUrl : string) {...