In primo luogo, non conosco Swing e le capacità o le potenzialità di JTextArea
, quindi non posso commentare la tua decisione di renderlo il punto centrale della tua soluzione (che @ DanPichelman sembra mettere in discussione nella sua risposta). Per l'argomento, suppongo che vada bene.
Qualunque sia il problema, i dettagli tecnici sono discussi meglio su StackOverflow - ci concentriamo sul design generale qui, quindi cercherò di affrontare l'aspetto OOD della tua domanda.
Devi assicurarti che la tua classe non diventi troppo grande. Può seriamente danneggiare la manutenibilità del tuo codice. Come fai a sapere quando è troppo grande?
Il fattore più semplice è la dimensione del suo codice. Non esiste un numero magico che separa "troppo grande" da "ancora buono", ma c'è il buon senso e alcune regole empiriche. Sono abbastanza liberale in questo aspetto, ma secondo i miei standard qualsiasi classe è più grande di 200 o 300 righe di codice alza una bandiera rossa.
La regola concettuale è il principio di singola responsabilità . Qual è la responsabilità della tua classe: diamo un titolo funzionante di JRichTextArea
?
Sta visualizzando un rich text. Visualizzazione . Questo è il suo campo di competenza. Non dovrebbe sapere nulla del mondo esterno, poiché rompe incapsulamento e aggiunge un secondario responsabilità ad esso.
L'unica forma in cui la sua "capacità di essere influenzata dai pulsanti sull'interfaccia utente" dovrebbe essere implementata sta esponendo alcune API pubbliche che consentono ad altri agenti di passarle il contenuto (in un formato comprensibile) che è in grado di visualizzare o renderizzare. Non c'è alcun motivo sotto il sole perché dovrebbe conoscere le pressioni dei pulsanti sull'interfaccia utente, o l'esistenza stessa di qualsiasi pulsante, per quella materia.
Ad esempio, le regole di formattazione (in questo caso la logica aziendale) non sono di sua competenza. JRichTextArea
è una vista e non dovrebbe essere altro che. La corretta visualizzazione è stupida e non ha alcuna opinione sui dati visualizzati. L'alternativa è nota come anti-pattern di vista intelligente.
Anche il rendering dei tuoi contenuti non è necessariamente il suo lavoro. Se si desidera aggiungere un'opzione che consente all'utente di creare e modificare complesse equazioni matematiche, il meccanismo dovrebbe essere incorporato in JRichTextArea
?
Queste equazioni non verrebbero disegnate solo sullo schermo, all'interno dell'area di testo. Per stampare i documenti è necessario disegnarli in un buffer grafico. Pertanto, sarebbe meglio spostare il meccanismo in una classe EquationsRenderer
separata.
E riguardo il contenuto stesso; il testo formattato? Sono dati - non è uguale alla sua rappresentazione visiva. Probabilmente l'utente avrà bisogno di salvare i documenti formattati sul disco. In realtà stanno andando a salvare i dati, non la sua rappresentazione grafica da JRichTextArea
.
Il contenuto appartiene quindi a una sorta di classe Model. Ciò sarebbe coerente con il pattern MVC . Non è un Santo Graal, ma un buon modo universalmente riconosciuto per raggiungere la separazione delle preoccupazioni.
Inoltre, le interazioni con l'interfaccia utente sono un lavoro per una sorta di classe di controller, che delega i comandi dell'utente al modello (ad esempio RichDocument
). Il controllore viene informato che tale e tale pulsante è stato premuto (ad esempio, evidenzia il testo selezionato in grassetto) e indica a RichDocument
cosa fare con i dati.
JRichTextArea
si trova alla fine di questa catena e il suo unico lavoro è quello di mostrare obbedientemente i risultati di questa catena di operazioni.
Questo è un esempio di ciò che definirei un approccio "serio" e "professionale" qui.