Wir haben eine Web-App, in der wir viele (> 50) kleine WebComponents haben , die miteinander interagieren.
Um alles entkoppelt zu halten, haben wir in der Regel, dass keine Komponente direkt auf eine andere verweisen kann. Stattdessen lösen Komponenten Ereignisse aus, die dann (in der "Haupt" -App) verdrahtet werden, um die Methoden einer anderen Komponente aufzurufen.
Mit der Zeit wurden immer mehr Komponenten hinzugefügt und die "Haupt" -App-Datei wurde mit Codeblöcken übersät, die so aussahen:
buttonsToolbar.addEventListener('request-toggle-contact-form-modal', () => {
contactForm.toggle()
})
buttonsToolbar.addEventListener('request-toggle-bug-reporter-modal', () => {
bugReporter.toggle()
})
// ... etc
Um dies zu verbessern, haben wir ähnliche Funktionen zusammengefasst, in a Class
, nennen Sie es etwas Relevantes, übergeben Sie die beteiligten Elemente beim Instanziieren und behandeln Sie die "Verkabelung" innerhalb derClass
, wie folgt:
class Contact {
constructor(contactForm, bugReporter, buttonsToolbar) {
this.contactForm = contactForm
this.bugReporterForm = bugReporterForm
this.buttonsToolbar = buttonsToolbar
this.buttonsToolbar
.addEventListener('request-toggle-contact-form-modal', () => {
this.toggleContactForm()
})
this.buttonsToolbar
.addEventListener('request-toggle-bug-reporter-modal', () => {
this.toggleBugReporterForm()
})
}
toggleContactForm() {
this.contactForm.toggle()
}
toggleBugReporterForm() {
this.bugReporterForm.toggle()
}
}
und wir instanziieren so:
<html>
<contact-form></contact-form>
<bug-reporter></bug-reporter>
<script>
const contact = new Contact(
document.querySelector('contact-form'),
document.querySelector('bug-form')
)
</script>
</html>
Ich bin es wirklich leid, eigene Muster einzuführen, insbesondere solche, die seit meiner Verwendung nicht wirklich OOP-y sind Classes
als Initialisierungscontainer verwende, kein besseres Wort habe.
Gibt es ein besseres / bekannteres definiertes Muster für die Bearbeitung dieser Art von Aufgaben, die mir fehlen?