Ho una grande applicazione in Java piena di classi indipendenti che sono unificate in una classe PlayerCharacter
. La classe è destinata a contenere i dati di un personaggio per un gioco chiamato Burning Wheel e, di conseguenza, è insolitamente complessa. I dati nella classe devono avere calcoli controllati dall'interfaccia utente, ma devono essere eseguiti in modo particolare per ciascuno degli oggetti della classe.
Ci sono 19 oggetti nella classe PlayerCharacter
. Ho pensato di ridurlo, ma sono abbastanza sicuro che non funzionerebbe in nessuna parte dell'applicazione così com'è.
private String name = ""; private String concept = "";
private String race = ""; private int age = -1;
private ArrayList<CharacterLifepath> lifepaths = new ArrayList<>();
private StatSet stats = new StatSet();
private ArrayList<Affiliation> affiliations = new ArrayList<>();
private ArrayList<Contact> contacts = new ArrayList<>();
private ArrayList<Reputation> reputations = new ArrayList<>();
//10 more lines of declarations
Ho preso in considerazione questo problema da un po 'di tempo e ho considerato più approcci. Il problema sorge principalmente quando i dati vengono cancellati - ad esempio, poiché praticamente tutto il resto (ma non alcune parti!) Dipende da Lifepath, quando un lifepath viene eliminato, quasi tutto il resto deve essere ricalcolato. Tuttavia, se un'abilità viene eliminata, solo alcune cose devono essere ricalcolate.
Inoltre, l'applicazione deve tracciare determinati valori da qualche parte; punti abilità, punti tratti, ecc. per garantire che l'utente non superi inavvertitamente tali valori.
Quindi la mia domanda è generalmente la seguente: dove dovrebbe andare tutto? Cosa rende questo più semplice? Ci sono un paio di opzioni:
- Calcoli totali dei punti di posizionamento nella classe PlayerCharacter (ma come si genera un avviso?)
- Gestisci tutti i calcoli al di fuori della classe PlayerCharacter, e usa semplicemente PlayerCharacter come contenitore per tutte le informazioni del personaggio
- Inserisci tutti i calcoli nella classe PlayerCharacter; dopo che ogni elemento è cambiato, ricalcolare l'intero personaggio. Quindi, se ci sono problemi derivanti dall'eliminazione, riporta gli avvisi all'interfaccia utente.
Sono leggermente sopraffatto dallo scopo di questa particolare classe - mentre tutto quello che ho fatto finora è stato facilmente suddiviso in piccoli pezzi gestibili, questa bestia sembra resistere all'essere domata. Se c'è un approccio migliore a questo, sono tutto orecchie! Ma al momento, sono un po 'confuso, e progredire senza meta probabilmente probabilmente non mi porterà da nessuna parte. Qualsiasi consiglio è apprezzato.
Mi scuso se questo non è chiaro - sono certo che mi manca il vocabolario del software per comunicare correttamente le mie idee. Mi piacerebbe migliorare questa domanda - qualsiasi aiuto qui è apprezzato!