Temos um aplicativo da Web em que temos muitos (> 50) de pequenos componentes da Web que interagem entre si.
Para manter tudo dissociado, temos como regra que nenhum componente pode fazer referência direta a outro. Em vez disso, os componentes disparam eventos que são então (no aplicativo "principal") conectados para chamar os métodos de outro componente.
Com o passar do tempo, mais e mais componentes foram adicionados e o arquivo do aplicativo "principal" ficou cheio de pedaços de código parecidos com o seguinte:
buttonsToolbar.addEventListener('request-toggle-contact-form-modal', () => {
contactForm.toggle()
})
buttonsToolbar.addEventListener('request-toggle-bug-reporter-modal', () => {
bugReporter.toggle()
})
// ... etc
Para melhorar isso, agrupamos funcionalidades semelhantes, em Class
, dê um nome relevante, passe os elementos participantes ao instanciar e manipule a "fiação" dentro do Class
, da seguinte forma:
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 instanciamos assim:
<html>
<contact-form></contact-form>
<bug-reporter></bug-reporter>
<script>
const contact = new Contact(
document.querySelector('contact-form'),
document.querySelector('bug-form')
)
</script>
</html>
Estou muito cansado de introduzir padrões próprios, especialmente aqueles que não são realmente OOP-y, pois estou usando Classes
como meros recipientes de inicialização, por falta de uma palavra melhor.
Existe um padrão definido melhor / mais conhecido para lidar com esse tipo de tarefa que estou perdendo?