Estoy leyendo el libro "Learning TypeScript" de Remo Jansen. En una sección, el autor describe cómo crear un marco MVC de prueba de concepto muy simple que incluye cómo crear la Model
clase y dice lo siguiente:
Se debe proporcionar un modelo con la URL del servicio web que consume. Vamos a utilizar un decorador de clase llamado ModelSettings para establecer la URL del servicio que se consumirá. Podríamos inyectar la URL del servicio a través de su constructor, pero se considera una mala práctica inyectar datos (a diferencia de un comportamiento) a través de un constructor de clase .
No entiendo esa última oración. En particular, no entiendo lo que significa "inyectar datos". Me parece que en casi todas las introducciones a las clases de JavaScript que usan ejemplos demasiado simplificados, los datos se introducen (¿"inyectados"?) En el constructor a través de sus parámetros. Por ejemplo:
class Person {
constructor(name) {
this.name = name;
}
}
Ciertamente pienso name
en los datos, no como el comportamiento, y se incluye universalmente en este tipo de ejemplo como un parámetro constructor, y nunca se menciona que esta sea una mala práctica. Por lo tanto, supongo que estoy malentendiendo algo en la cita anterior, ya sea lo que se entiende por "datos" o por "inyectar" u otra cosa.
Sus respuestas podrían incluir explicaciones de cuándo, dónde, cómo y por qué usar decoradores en JavaScript / TypeScript, ya que sospecho que ese concepto está íntimamente relacionado con la comprensión que busco. Sin embargo, lo que es más importante, quiero comprender de manera más general qué se entiende por inyectar datos a través de un constructor de clases y por qué eso es malo.
Para dar más contexto a la cita anterior, esta es la situación: Model
se crea una clase que, en este ejemplo, se utilizará para crear modelos de bolsa, uno para NASDAQ y otro para NYSE. Cada modelo requiere la ruta del servicio web o el archivo de datos estáticos que proporcionará los datos sin procesar. El libro establece que se debe usar un decorador para esta información, en lugar de un parámetro constructor, lo que lleva a lo siguiente:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Simplemente no he entendido por qué debería agregar la URL del servicio a través del decorador en lugar de simplemente como un parámetro para el constructor, por ejemplo
constructor(metiator : IMediator, serviceUrl : string) {...