Hier noch eine Ergänzung.
@AggroRalf sagte hier:
Ich hatte ja vor kurzem eine Diskussion mit Klassen angestoßen. Der Ansatz würde damit auch nicht direkt funktionieren. Das Problem ist ein bischen, dass die Adapter-Klasse die Ableitung von utils.Adapter hat, dadurch müsste man bei dem Ansatz die anderen Klassen dann auch ableiten (und im constructor super verwenden), was glaub blöd war.
Ich fänds gut, wenn die Adapter-Klasse einfach nur Basics enthält und man seinen "Kram" dann in eigene Klassen auslagert, aber z.B. über eine vorgegebene Helferklasse oder so Zugriff auf die Objekte in der Adapter-Klasse (Config, Log) hätte
Damit wären Updates in der ADapter-Klasse einfach und man könnte die Helfer-Klasse vlt. auch zentral bereitstellen, z.B. mit Error-Handling, Sentry, ...
Könnte man natürlich auch direkt in utils.Adapter oder so packen
Antwort von @AlCalzone :
Ein klassisches Beispiel wie man sowas konventionell macht wären z.B. factory-Methoden:
// mein-modul.js
module.exports = function (adapter) {
return {
methode1() { adapter.log("1"); },
// ...
}
}
// -------
// main.js
let meinModul;
class Adapter extends ... {
constructor() {
meinModul = require("mein-modul.js")(this);
// oder alternativ als Instanz-Variable speichern
}
}
Die Vererbung zu missbrauchen, nur um Zugriff auf die Instanz zu haben ist nicht so ganz der JavaScript-Style.
@Mic schreibt:
Spricht was dagegen, stattdessen mit ner Klasse zu arbeiten? Oder ist das nur Geschmackssache? Ergebnis hier im Beispiel ja das gleiche. Oder bläht eine Klasse hier unnötig was auf?
// mein-modul.js
class MeineKlasse {
constructor(adapter) {
this.adapter = adapter;
}
methode1() { this.adapter.log.info('1'); }
// ...
}
module.exports = MeineKlasse;
// -------
// main.js
const MeinModul = require('./lib/mein-modul.js');
class Adapter extends ... {
constructor() {
meinModul = new MeinModul(this);
}
}
@AlCalzone schreibt:
Geht auch
Ist ein bisschen Geschmackssache, bzw. Gewohnheit von Programmiersprachen, wo halt alles in Klassen sein muss.
In meinem Gedankenmodell sind Klassen für Dinge...
von denen es mehrere Instanzen geben wird
oder wo die Vererbung gewinnbringend eingesetzt wird
oder die ich als "Dinge" verstehe
Für Helfer (insbesondere bunt zusammengewürfelte) passt es nicht so in mein Gedankenmodell, weil in der Node.js-Runtime auch (fast) alle Methoden alleinstehend importiert werden.
Im Endeffekt sind Klassen aber auch nur Funktionen, die hinter etwas Syntax versteckt sind