Sto creando la parte del modello di un'architettura MVC. La mia unica classe fornirà tutti gli accessi per consentire a uno di recuperare lo stato del sistema. Voglio che la maggior parte di questo stato sia immutabile in quanto non dovrebbe essere modificato e non voglio che nessuno acceda al mio modello per poter violare lo stato facendo un cambiamento folle.
Tuttavia, gli oggetti che rappresentano lo stato hanno un po 'di struttura ad albero. l'oggetto A contiene un insieme di B che contiene un insieme di oggetti C che contengono un insieme di oggetti D ecc. ecc. Data la natura di come devo recuperare i dati, non posso costruire la struttura dal basso verso l'alto; la parte più bassa dell'oggetto "chid" verrà generata dopo che tutte le altre sono state completate. Questo rende piuttosto scomodo costruire gli oggetti immutabili in modo intuitivo, voglio aggiungere un set come ultima fase di costruzione ma non posso se ho già creato oggetti immutabili.
Conosco tre approcci, ma non sono sicuro che mi piacciano. Uno è un costruttore patern, ma tenere traccia di tutti i costruttori per una struttura complicata finché non ho finito sembra che potrebbe essere molto brutto. In secondo luogo è di avere una sorta di metodo "clone" che costruisce un nuovo oggetto immutabile clonando il vecchio ma aggiungendo un nuovo set ad esso fornito (come viene chiamato di nuovo questo modello?). Questo diventa brutto quando provo ad aggiungere al figlio la maggior parte degli elementi del set dato che ho bisogno di ricostruire praticamente l'intero albero con 'nuovi' oggetti immutabili per aggiungere un valore.
La terza soluzione, finora la più semplice, è quella di eliminare la struttura ad albero e farli chiamare al mio modello per ottenere i dati desiderati. così invece di chiamare myObject.getChildren chiamano Model.getObjectChildren (myObject). Questo funzionerà, ma accidenti volevo la bella struttura ad albero per il mio stato immutabile.
C'è un altro modo per costruire comodamente il mio stato in un modo in cui il mio modello può modificare liberamente lo stato mentre viene costruito; ma è ancora immutabile quando è finalmente pubblicato sul Controller?
ps. Sto correndo in java se questo è importante.