Je lis le livre "Learning TypeScript" de Remo Jansen. Dans une section, l'auteur décrit comment créer un cadre MVC de preuve de concept très simple, y compris comment créer la Model
classe et dit ce qui suit:
Un modèle doit être fourni avec l'URL du service Web qu'il consomme. Nous allons utiliser un décorateur de classe nommé ModelSettings pour définir l'URL du service à consommer. Nous pourrions injecter l'URL du service via son constructeur, mais il est considéré comme une mauvaise pratique d'injecter des données (par opposition à un comportement) via un constructeur de classe .
Je ne comprends pas cette dernière phrase. En particulier, je ne comprends pas ce que signifie "injecter des données". Il me semble que dans presque toutes les introductions aux classes JavaScript utilisant des exemples simplifiés, des données sont introduites ("injectées"?) Dans le constructeur via ses paramètres. Par exemple:
class Person {
constructor(name) {
this.name = name;
}
}
Je pense certainement à des name
données, pas à un comportement, et elles sont universellement incluses dans ce type d'exemple comme paramètre constructeur, et il n'est jamais fait mention que c'est une mauvaise pratique. Je suppose donc que je comprends mal quelque chose dans la citation ci-dessus, soit ce que l'on entend par "données" ou par "injecter" ou autre chose.
Vos réponses pourraient inclure des explications sur quand, où, comment et pourquoi utiliser des décorateurs en JavaScript / TypeScript, car je soupçonne fortement que le concept est intimement lié à la compréhension que je recherche. Cependant, plus important encore, je veux comprendre plus généralement ce que l'on entend par injection de données via un constructeur de classe et pourquoi c'est mauvais.
Pour donner plus de contexte à la citation ci-dessus, voici la situation: une Model
classe est créée qui, dans cet exemple, sera utilisée pour créer des modèles de bourse, un pour NASDAQ et un pour NYSE. Chaque modèle nécessite le chemin du service Web ou du fichier de données statiques qui fournira les données brutes. Le livre indique qu'un décorateur doit être utilisé pour ces informations, plutôt qu'un paramètre constructeur, conduisant à ce qui suit:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Je ne comprends tout simplement pas pourquoi je devrais ajouter l'URL du service via le décorateur plutôt que simplement comme paramètre pour le constructeur, par exemple
constructor(metiator : IMediator, serviceUrl : string) {...