Rendere immutabile una classe incline al cambiamento

4

Secondo l'efficace Java Articolo 15: Riduci la mutabilità , è sempre meglio rendere le classi immutabili. In base a ciò, come gestirò le lezioni che sono date per natura al cambiamento?

Alcuni esempi potrebbero essere:

  • Una classe Cliente , in cui un indirizzo o numero di telefono può (e probabilmente cambierà).
  • Una classe ShippingRule , in cui i mittenti vengono selezionati in base a criteri diversi. È logico che la regola debba essere modificabile ...

In tali casi, li rendiamo necessariamente immutabili? Quali altre convenzioni ci sono?

    
posta IntelliData 07.04.2017 - 19:34
fonte

1 risposta

6

Ho letto il capitolo che hai affermato e posso vedere come potresti essere confuso, poiché il capitolo non descrive come potresti usare oggetti immutabili.

L'immutabilità è una parte fondamentale della programmazione funzionale. Per vedere come funziona, considera questo codice:

MyImmutableClass newInstance = transform(MyImmutableClass originalInstance);

Il metodo transform accetta l'oggetto originalInstance , lo trasforma (tale trasformazione può essere qualsiasi operazione) e restituisce un nuovo oggetto contenente la trasformazione.

Perché vorresti creare un nuovo oggetto, invece di modificarne uno esistente?

  1. Crea una cronologia delle modifiche.
  2. Semplifica la concorrenza. Gli oggetti immutabili non sono soggetti a problemi di concorrenza come le condizioni di gara. Le funzioni che utilizzano oggetti immutabili possono essere facilmente decomposte in processi concomitanti separati senza problemi.
  3. Gli oggetti immutabili sono più facili da ragionare.

Nelle applicazioni aziendali che prevedono operazioni CRUD , perché in genere utilizzi già un database con ACID garantisce, è più comune semplicemente mutare i valori nell'oggetto che si desidera modificare e quindi eseguire un salvataggio ( U pdate).

    
risposta data 07.04.2017 - 21:29
fonte

Leggi altre domande sui tag