Modifica membri dati da altre classi - valuta la mia soluzione?

1

Ho bisogno di modificare i membri dei dati di una classe, ma poiché ci sono molti casi d'uso, vorrei mettere i metodi di modifica in classi separate per non rendere la classe principale troppo grande.

Quindi sto pensando di proteggere i membri dei dati e utilizzare le classi derivate come interfacce per modificare i membri dei dati per ciascun caso d'uso diverso.

Questa è una soluzione comune al mio problema? È un buon modo per risolverlo o c'è qualcosa di meglio?

    
posta devil0150 02.10.2017 - 23:02
fonte

1 risposta

2

I need to modify the data members of a class, but since there are a lot of use cases, I would like to put the modifier methods in separate classes to not make the main class too large.

Penso che sia una buona idea estrarre la logica di modifica al di fuori della classe che definisce i membri. Sembra che i membri dei dati siano un modello e la logica di modifica è probabilmente logica aziendale. Per favore correggimi se sbaglio.

So I'm thinking of making the data members protected, and using derived classes as interfaces to modify the data members for each different use case. Is this a common solution to my problem? Is this a good way of solving it?

Non ho mai visto qualcosa di simile prima, e per me non sembra un buon design. Ecco i motivi:

is there something better?

Avrei un approccio diverso. Vorrei rendere immutabile la classe del modello:

class Foo {
    private final Integer a;
    private final String b;

    public Foo(Integer a, String b) {
        this.a = a;
        this.b = b;
    }

    public Integer getA() { return a; }
    public String getB() { return b; }
}

Ora che ho un modello, voglio trasformarlo. Posso definire una trasformazione del modello:

interface FooTransformation {
    Foo transform(Foo foo);
}

Ora puoi esprimere tutti i tuoi casi d'uso in termini di FooTransformation di implementazioni in questo modo:

class UseCase1 implements FooTransformation {
    public Foo transform(Foo foo) {
        return new Foo(foo.getA() + 5, foo.getB() + "world");
    }
}

Questo design ha alcune cose positive:

  • Modello immutabile
  • Casi d'uso del test dell'unità facile
risposta data 02.10.2017 - 23:56
fonte

Leggi altre domande sui tag