Abbiamo creato una classe che ti consente di disegnare facilmente elementi su un elemento <canvas> .
Quella classe è chiamata Canvas . Ho incapsulato l'elemento <canvas> e la classe stessa in un WebComponent, chiamato <paper-canvas> .
<paper-canvas>
<canvas id="#canvas"></canvas>
<paper-canvas>
<script>
class PaperCanvas {
constructor() {
this.canvas = new Canvas('#canvas')
}
}
</script>
La classe Canvas ha molti metodi come:
-
importPNG() -
drawSquare()
etc ..
Quindi adesso quando vogliamo dire importPNG() facciamo qualcosa del genere:
document.querySelector('paper-canvas').canvas.importPNG()
ma ho la sensazione che si stia rompendo l'incapsulamento dal momento che sto accedendo alle proprietà interne di <paper-canvas> .
Un'alternativa potrebbe essere qualcosa di simile a questo:
<paper-canvas>
<canvas id="#canvas"></canvas>
<paper-canvas>
<script>
class PaperCanvas {
constructor() {
this.canvas = new Canvas('#canvas')
}
importPNG() {
return this.canvas.importPNG()
}
}
</script>
e quindi per usarlo:
document.querySelector('paper-canvas').importPNG()
ma questo significa che ogni volta che aggiungo un nuovo metodo su Canvas che dovrebbe essere pubblicamente accessibile agli altri membri, vorrei anche aver bisogno di aggiungerlo alla mia classe PaperCanvas .
Qual è il modo consigliato di trattare tali casi?