Ich lese das Buch "Learning TypeScript" von Remo Jansen. In einem Abschnitt beschreibt der Autor, wie ein sehr einfaches Proof-of-Concept-MVC-Framework erstellt wird, einschließlich der Erstellung der Model
Klasse, und sagt Folgendes:
Ein Modell muss mit der URL des Webdienstes versehen sein, den es verwendet. Wir werden einen Klassendekorateur namens ModelSettings verwenden, um die URL des zu konsumierenden Dienstes festzulegen. Wir könnten die Service-URL über ihren Konstruktor einfügen, aber es wird als schlechte Praxis angesehen, Daten (im Gegensatz zu einem Verhalten) über einen Klassenkonstruktor einzufügen .
Ich verstehe diesen letzten Satz nicht. Insbesondere verstehe ich nicht, was es bedeutet, "Daten zu injizieren". Es scheint mir, dass in fast allen Einführungen in JavaScript-Klassen anhand stark vereinfachter Beispiele Daten über ihre Parameter in den Konstruktor eingeführt ("injiziert"?) Werden. Zum Beispiel:
class Person {
constructor(name) {
this.name = name;
}
}
Ich denke sicherlich an name
Daten, nicht an Verhalten, und es ist allgemein in dieser Art von Beispiel als Konstruktorparameter enthalten, und es wird nie erwähnt, dass dies eine schlechte Praxis ist. Ich gehe daher davon aus, dass ich etwas im obigen Zitat falsch verstehe, entweder was mit "Daten" oder "Einspritzen" oder etwas anderem gemeint ist.
Ihre Antworten könnten Erklärungen enthalten, wann, wo, wie und warum Dekoratoren in JavaScript / TypeScript verwendet werden, da ich stark vermute, dass das Konzept eng mit dem von mir gesuchten Verständnis verbunden ist. Noch wichtiger ist jedoch, dass ich allgemeiner verstehen möchte, was unter dem Einfügen von Daten über einen Klassenkonstruktor zu verstehen ist und warum dies schlecht ist.
Um dem obigen Zitat mehr Kontext zu geben, ist dies die Situation: Es Model
wird eine Klasse erstellt, die in diesem Beispiel zum Erstellen von Börsenmodellen verwendet wird, eines für NASDAQ und eines für NYSE. Jedes Modell benötigt den Pfad des Webdienstes oder der statischen Datendatei, die die Rohdaten bereitstellen. Das Buch besagt, dass für diese Informationen ein Dekorateur anstelle eines Konstruktorparameters verwendet werden sollte, was zu Folgendem führt:
@ModelSettings("./data/nasdaq.json")
class NasdaqModel extends Model implements IModel {
constructor(metiator : IMediator) {
super(metiator);
}
...
}
Ich habe nur nicht verstanden, warum ich die Service-URL über den Dekorator hinzufügen sollte, anstatt nur als Parameter für den Konstruktor, z
constructor(metiator : IMediator, serviceUrl : string) {...