Estou lendo o livro "Learning TypeScript" de Remo Jansen. Em uma seção, o autor descreve como criar uma estrutura MVC de prova de conceito muito simples, incluindo como criar a Model
classe e diz o seguinte:
Um modelo precisa ser fornecido com a URL do serviço da web que consome. Vamos usar um decorador de classe chamado ModelSettings para definir a URL do serviço a ser consumido. Poderíamos injetar a URL do serviço por meio de seu construtor, mas é considerado uma prática ruim injetar dados (em oposição a um comportamento) por meio de um construtor de classe .
Eu não entendo essa última frase. Em particular, não entendo o que significa "injetar dados". Parece-me que em quase todas as introduções às classes JavaScript usando exemplos simplificados, os dados são introduzidos ("injetados"?) No construtor por meio de seus parâmetros. Por exemplo:
class Person {
constructor(name) {
this.name = name;
}
}
Eu certamente penso name
como dados, não como comportamento, e é universalmente incluído nesse tipo de exemplo como um parâmetro construtor, e nunca há menção de que essa é uma prática ruim. Assim, suponho que estou entendendo mal algo na citação acima, seja o que se entende por "dados" ou "injetar" ou qualquer outra coisa.
Suas respostas podem incluir explicações sobre quando, onde, como e por que usar decoradores em JavaScript / TypeScript, pois suspeito fortemente que o conceito esteja intimamente conectado ao entendimento que procuro. No entanto, o mais importante, quero entender de maneira mais geral o que significa injeção de dados por meio de um construtor de classe e por que isso é ruim.
Para dar mais contexto à cotação acima, esta é a situação: Model
É criada uma classe que, neste exemplo, será usada para criar modelos de bolsa de valores, um para NASDAQ e outro para NYSE. Cada modelo requer o caminho do serviço da web ou arquivo de dados estático que fornecerá os dados brutos. O livro afirma que um decorador deve ser usado para essas informações, em vez de um parâmetro construtor, levando ao seguinte:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Só não entendi por que devo adicionar o URL do serviço por meio do decorador, em vez de simplesmente como um parâmetro para o construtor, por exemplo
constructor(metiator : IMediator, serviceUrl : string) {...