Actualmente estoy haciendo una revisión del código de material tomado de otro equipo y tengo una duda sobre la aplicación de SRP y su relación con el modelo de dominio anémico o rico (como lo define Martin Fowler). El concepto de modelo de dominio enriquecido es tener un objeto inteligente que no solo puede establecer/obtener sus propiedades, sino que también puede realizar una lógica de negocios más complicada. Me pregunto cómo encaja en SRP?¿Cómo se relaciona el principio de responsabilidad única con el modelo de dominio anémico/rico?
Digamos que tengo mi clase de modelo que tiene algunas propiedades que pueden exponer esos accesorios y proporcionar algunos cálculos simples sobre sus propiedades. A continuación requisito es tener la posibilidad de almacenar estos datos de objeto en un objeto de almacenamiento que no está bajo mi control, así: método
class MyObject {
// get set
// parse sth
}
tienda en el almacenamiento
storage.store(key, object);
¿No se viola si SRP MiObjeto tiene método tienda como esta
public void store(Storage storage) {
storage.store('keyOne', fieldOne);
storage.store('keyTwo', fieldTwo);
}
de Punto de vista de este objeto es una buena pensar que ser capaz de almacenar su estado. Otra forma podría ser la introducción de una especie de servicio aquí y hacer esto así:
public StorageService {
private Storage;
// constructor here
....
public void store(MyObject myobj);
}
¿Me puede indicar cualquier enlace que puede leer acerca de este problema? He encontrado un hilo en SO aquí, pero no responde mi pregunta por completo.
¿Cómo se resuelve en DDD? Los modelos en DDD son, por definición, ricos y se puede considerar que tienen demasiadas responsabilidades.
Esa podría ser una interpretación demasiado literal de SRP. Ignora al tío Bob y busca la "cohesión". –
Como mencioné en mi respuesta, si el Almacenamiento es estable y abstracto (por ejemplo, alguna interfaz estándar JSON, XML, RDB) entonces, IMO, no hay absolutamente ningún problema para la cohesión y ponerlo en el modelo de dominio. – user949300