Abbiamo un'app Web in cui abbiamo molto (> 50) di piccoli WebComponents che interagiscono tra loro.
Per mantenere tutto disaccoppiato, abbiamo di regola che nessun componente può fare riferimento direttamente a un altro. Invece, i componenti sparano eventi che sono poi (nell'app "principale") cablati per chiamare i metodi di un altro componente.
Con il passare del tempo, sempre più componenti sono stati aggiunti e il file dell'app "principale" è stato disseminato di blocchi di codice con questo aspetto:
buttonsToolbar.addEventListener('request-toggle-contact-form-modal', () => {
contactForm.toggle()
})
buttonsToolbar.addEventListener('request-toggle-bug-reporter-modal', () => {
bugReporter.toggle()
})
// ... etc
Per migliorare questo abbiamo raggruppato funzionalità simili insieme, in un Class
, chiamiamolo qualcosa di rilevante, passare gli elementi partecipanti durante l'istanziazione e gestire il "cablaggio" all'interno di Class
, in questo modo:
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()
}
}
e istanziamo in questo modo:
<html>
<contact-form></contact-form>
<bug-reporter></bug-reporter>
<script>
const contact = new Contact(
document.querySelector('contact-form'),
document.querySelector('bug-form')
)
</script>
</html>
Sono molto stanco di introdurre dei pattern personali, specialmente quelli che non sono realmente OOP-y dal momento che sto usando Classes
come semplici contenitori di inizializzazione, per mancanza di una parola migliore.
C'è un modello definito migliore / più noto per la gestione di questo tipo di attività che mi manca?