SRP. Salva nel repository quando si modifica. Internamente o esternamente? [chiuso]

-2

Ad esempio:

class Data {
    private String field1;
    private String field2;

    public void someEditMethod() {}
}

class DataRepository {
    public void save(Data data) {
        // save to DB
    }
}

Ho bisogno di salvare i dati durante la modifica.

Quanto è meglio?

internamente:

....
public void someEditMethod() {
    repo.save(this);
}
....

o esternamente:

....
DataRepository repo = new DataRepository(dbConnection);
Data data = new Data(repo);
data.someEditMethod();
....

Esternamente è spiacevole, e non voglio imporre la conoscenza dei clienti di classe sul repository.

    
posta Алексей Мальченко 06.01.2016 - 20:50
fonte

1 risposta

2

Stai mescolando insieme repository e record attivo. Se si desidera utilizzare il repository nel vero senso della parola ( come suggerisce M. Fowler ), l'approccio esterno è ciò che si desidera per andare, ma esterno in un modo diverso rispetto al design proposto.

Con il repository il processo dovrebbe assomigliare a questo:

DataRepository repo = new DataRepository(dbConnection);
Data data = repo.GetData();
data.someEditMethod();
repo.Save(data);

Se vuoi usare l'approccio interno, allora il design è chiamato record attivo - un'entità che conosce la sua persistenza (e anche se è disapprovato come un anti-pattern, a volte può essere migliore di usare l'approccio del repository) .

Il registro attivo non è molto popolare nel mondo delle imprese, perché le entità che di solito conoscono la loro persistenza includono anche la logica di business e quindi mescolano due ripercussioni.

    
risposta data 06.01.2016 - 22:49
fonte

Leggi altre domande sui tag