Ho a che fare con un'app di disegno che consente all'utente di disegnare un set di componenti (che sono come i vertici del grafico) e possono essere cablati (come i bordi del grafico) l'uno sull'altro per simulare il modo in cui la connessione si propagano e influenzano ogni componente in base al loro input, come una funzione su ciascun nodo che prende tutti gli input, applica la sua funzione e imposta i suoi output. Quindi, propaga il valore su altri componenti collegati alle uscite.
La difficoltà sta nel fatto che il mio Component
è anche un Draw
da dipingere su una tela. Solitamente problemi come questo vengono risolti usando la soluzione di auto-disegno come nell'esempio seguente:
abstract class Component {
// component stuff
inputs: [] = [];
outputs: [] = [];
abstract function(): void;
// drawing stuff
x: number = 0;
y: number = 0;
draw(drawer: Drawer){
drawer.drawCircle(this.x, this.y, 20);
}
}
Ma sembra che mescolare il disegno del con il significato di quel Vertice sia un cattivo design e davvero disordinato quando si cerca di capire il codice.
Ho visto persone suggerire di creare classi diverse per Draw e Component e il disegno contiene il riferimento del componente reale. Sembra ragionevole, ma non so se questa sia la soluzione più pratica perché sembra che devi duplicare l'intera struttura sotto forma di grafico solo per separare il disegno da esso.
Vorrei sapere se esiste un approccio migliore per questo tipo di problema.