Yo diría que ambos están perdiendo el barco, y al mismo tiempo en el camino correcto ... déjenme explicar.
DDD es la mejor manera que conocemos como industria para codificar la realidad de un problema comercial en un dominio de solución que podemos asignar a un programa de computadora. DDD es una metodología para abstraer un dominio real en algo más manejable y relevante para nosotros, estas son cosas buenas.
El problema al que se enfrenta es en la implementación, la elección predominante de implementación durante los últimos 20-30 años ha sido la orientación a objetos (OO), el mecanismo central de pasar objetos en OO es pasando referencias a objetos en el el mismo espacio de memoria que tu. Entonces, los problemas que enfrentas en los gráficos de objetos grandes nunca son un problema real.
Introduzca la orientación del servicio (SO), que cambia las cosas, ya no está pasando referencias a objetos, sino intercambiando mensajes entre servicios. El tamaño del mensaje ahora se convierte en una preocupación.
Si aceptamos que el paradigma de implementación ha cambiado, debemos aceptar que algunos de nuestros mejores patrones/prácticas de OO ya no se aplican o no necesitan revisión.
Si desea entrar en la forma de pensar SO, tiene que, creo (mi opinión aquí), dejar pasar la idea de un dominio rico ligeramente. Yo llamo a este nuevo concepto un Dominio orientado a servicios (SO-Domain).
En un SO-Domain, el estado del dominio y el comportamiento del dominio se divide entre los mensajes que pasa y los servicios que utiliza.
Entonces el estado o los atributos del profesor son parte del TeacherDTO, pero el comportamiento es parte del servicio del maestro.
En términos OO, este es un dominio anémico, pero en un sentido TAN no es tan malo ya que esto le da una flexibilidad increíble, ya que no tiene una gran cosa, el estado puede usarse en múltiples contextos .
Aún tiene un dominio válido, solo tiene particiones diferenciales, los mensajes mantienen el estado y mantienen el comportamiento de los servicios.
El resto se reduce al diseño de la interfaz de servicio, por lo que para obtener la clase de un profesor puede tener cosas como List RetrieveTeacherClasses (teacherIdentifier). Para agregar un alumno AddStudentToClass (Student, classId).
Hay un millón de formas diferentes de hacer esto, encontrará la que le funcione, pero como regla general, debe seguir un paradigma consciente del estado, esto significa que el mensaje enviará cualquier estado que necesite el servicio. consciente, esto permite que el servicio sea sin estado, y el servicio sin estado significa escalabilidad.
Pratik menciona el rendimiento, las verdaderas ganancias de rendimiento en una escala de todo el sistema no se logran alterando el tamaño de los gráficos de objeto, sino la capacidad de cada servicio en la solución para escalar independientemente.
Éstos son algunos enlaces a más de estas ideas
Building a SOA
SOA Design Pattern
Achieving integrity in a SOA
Why your SOA should be like a VW Beetle
SOA explained for your boss
WCF Service Performance
realidad no abordar la pregunta sobre si DDD y SOA son ortogonales entre sí. –