Immutabile vs Sola lettura vs Differenza di denominazione non modificabile [chiusa]

1

Quindi, ho esaminato alcune domande simili qui poste riguardo a come questi tre dovrebbero essere usati nella denominazione. Di solito, la risposta è qualcosa sulla falsariga di "è convenzionale" e "basta essere coerenti". Mi chiedo se sia la stessa risposta per la mia domanda.

Ho un'interfaccia StatSet definita come

public interface StatSet {

    int getHitpoints();

    int getAttack();

    int getDefense();
}

Voglio definire un'implementazione, in cui tutti i campi sono definiti nel costruttore:

public final class ReadOnlyStatSet {

    public ReadOnlyStatSet(final int hitpoints, final int attack, final int defense) {
        this.hitpoints = hitpoints;
        this.attack = attack;
        this.defense = defense;
    }

    public int getHitpoints() {
        return hitpoints;
    }

    public int getAttack() {
        return attack;
    }

    public int getDefense() {
        return defense;
    }

    private final int hitpoints;
    private final int attack;
    private final int defense;
    // no other fields
}

La mia domanda è: è ReadOnlyStatSet il nome migliore per questo tipo di classe. Oppure, Immutable sarebbe più adatto. In quale grammatica dovrei usare l'una sull'altra.

    
posta Zymus 24.03.2015 - 00:23
fonte

2 risposte

3

Qualsiasi dei precedenti sembra logico. Immutabile, non modificabile e ReadOnly sono tutte scelte accettabili. È tuttavia importante attenersi a una convenzione. Se alcune delle tue classi sono "Immutabili" mentre altre sono "ReadOnly", ciò potrebbe implicare l'esistenza di una differenza, che potrebbe confondere un consumatore del tuo codice pubblico.

Personalmente uso e preferisco Immutable per descrivere oggetti che non possono essere mutati, ma non vedo alcuna ragione per cui qualcuno che segue un approccio diverso sia sbagliato.

A parte, ho visto il progetto Guava di Google usare "Immutable", come in ImmutableSet , mentre le collezioni Java usano "Unmodifiable", come UnmodifiableSet . L'unica differenza che ho potuto discernere è che ImmutableSet e gli amici di Guava sono le loro istanze di una raccolta, mentre UnmodifiableSet e gli amici sono wrapper che forniscono una vista 'Unmodifiable' di una collezione che può cambiare sotto. Un consumatore della vista UnmodifiableSet non può modificare la collezione, ma qualcuno con un riferimento alla collezione wrapping sottostante potrebbe cambiare ciò che contiene l'UnmodifiableSet, quindi si potrebbe facilmente sostenere che l'UnmodifiableSet non è "immutabile". Questo potrebbe essere il motivo per cui non è stato nominato come ImmutableSet al momento della creazione.

    
risposta data 24.03.2015 - 03:08
fonte
-2

Il nome del tuo oggetto immutabile / di sola lettura / non modificabile sembra superfluo.

Mi sembra strano che tu debba usare immutable, read-only, non modificabile o qualsiasi altra cosa nel nome della classe se la classe agisce già come immutabile.

Questo è qualcosa che dovresti descrivere usando le parole chiave / struttura di classe ma non il nome della classe.

    
risposta data 24.03.2015 - 02:48
fonte

Leggi altre domande sui tag