Quindi sto finendo di refactoring del codice per rimuovere un numero di oggetti precedentemente modificabili e aggiungere un'elaborazione generica migliore per tutte le classi nel dominio. Proprio mentre pensavo di finire mi sono reso conto che esiste una sottoclasse con uno stato aggiuntivo.
Lo stato aggiuntivo è un collegamento ad altre classi che vengono utilizzate come parte della logica per sapere quando verranno creati, cancellati o modificati nuovi oggetti di dominio. Tuttavia, questa sottoclasse viene creata solo all'avvio o quando qualcuno esegue un comando per rileggere e aggiornare i nuovi file di configurazione. So che questo oggetto always deve essere creato prima che uno qualsiasi degli altri oggetti nel mio dominio dipendano da esso, in modo tale che chiunque indichi questo oggetto sia tutto gaurenteed per puntare alla stessa istanza. Ho effettivamente il pattern di Memorizzazione per un incidente di come viene creata la struttura.
Potrei rifattorizzare la mutabilità; ma richiederebbe un po 'di lavoro modificando la logica di avvio che preferirei evitare. Oppure potrei cambiare i metodi has and equals per ignorare questo insieme di valori mutabili così il mio modello tratterà questo oggetto esattamente come se fosse un genitore immutabile e confido che la mia conoscenza del metodo che è stato costruito mi impedisca di creare problemi di aliasing quando cerco di usa i suoi tratti mutabili.
Quindi come 'sbagliato' è piegare il mio contratto per la classe in questo modo essere?