Attualmente sta eseguendo una revisione del codice di materiale acquisito da un'altra squadra e ha un dubbio sull'applicazione di SRP e sulla sua relazione con il modello di dominio anemico o ricco (come definito da Martin Fowler). Il concetto di un modello di dominio ricco consiste nell'avere un oggetto intelligente che non solo possa impostare/ottenere le proprie proprietà, ma anche eseguire una logica aziendale più complessa. Mi chiedo come si inserisce in SRP?Come il principio di singola responsabilità si riferisce al modello di dominio anemico/ricco?
Dire che la mia classe modello ha alcune proprietà che possono esporre quei puntelli e fornire alcuni semplici calcoli sulle sue proprietà. requisito successivo è quello di avere la possibilità di memorizzare questi dati oggetto in un oggetto di archiviazione che non è sotto il mio controllo, in questo modo: Metodo
class MyObject {
// get set
// parse sth
}
Store di stoccaggio
storage.store(key, object);
Non si viola SRP se MyObject ha un metodo store come questo
public void store(Storage storage) {
storage.store('keyOne', fieldOne);
storage.store('keyTwo', fieldTwo);
}
Dal punto di vista di questo oggetto è bene essere in grado di memorizzare il suo stato. altro modo potrebbe essere quello di introdurre una sorta di servizio qui e fare questo genere:
public StorageService {
private Storage;
// constructor here
....
public void store(MyObject myobj);
}
Mi può indicare tutti i link che può leggere su questo problema? Ho trovato una discussione su SO qui ma non risponde alla mia domanda completamente.
Come viene risolto in DDD? I modelli in DDD sono per definizione ricchi e possono essere visti come aventi troppe responsabilità.
Questa potrebbe essere un'interpretazione eccessivamente letterale di SRP. Ignora lo zio Bob e cerca la "coesione". –
Come notato nella mia risposta, se l'archiviazione è stabile e astratta (ad esempio, un'interfaccia JSON, XML, RDB standard), quindi, IMO, non vi è alcun problema di coesione e inserimento nel modello di dominio. – user949300