En this pregunta a alguien replies "¡Nunca dejes que las implementaciones de objetos de dominio llamen a los servicios por sí mismos!". ¿Es esta afirmación una regla dura de DDD o depende de su propia aplicación y arquitectura?Objetos y servicios de dominio
ejemplo artificioso:
Como ejemplo vamos a suponer que tenemos un objeto UserImage
en nuestro modelo que se rellena a partir de una imagen cargada por un usuario. Y luego supongamos que podemos enviar esta imagen a un servicio de terceros que pueda identificar huellas dactilares y devolver un Guid
si se encuentra una coincidencia.
public IThumbPrintService {
Guid FindMatch(Bitmap image);
}
public class UserImage {
public Bitmap Image {get; set;}
public Guid ThumbPrintId {get; set;}
public bool FindThumbPrintMatch() {
// Would you call the service from here?
ThumbPrintId = _thumbPrintService.FindMatch(this.Image);
return ! ThumbPrintId.CompareTo(Guid.Empty);
}
}
public class RoboCopUserImageService : IUserImageService {
// Or move the call to a service method
// since it depends on calling a separate service interface
public bool FindThumbPrintMatch(UserImage userImage) {
userImage.ThumbPrintId = _thumbPrintService.FindMatch(userImage.Image);
return !userImage.ThumbPrintId.CompareTo(Guid.Empty);
}
}
¿Qué se evita u obtiene al no permitir que los objetos de dominio llamen a los servicios por su cuenta?
EDITAR: ¿Hay algún artículo en línea que debata sobre este tema específico?
Gracias, el acertijo de hoja de cálculo hace este problema mucho más claro ahora. También me gusta cómo sugieres verbalizar el problema a los expertos del dominio para determinar qué enfoque tiene más sentido. –
Guau, respuesta brillante, muy clara, muy detallada. ¡Me gustaría darle más de una votación! – Guillaume
Gracias por los elogios. El contenido de esta respuesta es realmente una síntesis de los efectos de mi TOC no diagnosticado. Las preguntas que plantean DDD y OO nunca dejan de fascinarme. – moffdub