La razón principal de estos límites es la separación de las preocupaciones . El código que accede al almacén de datos solo debería preocuparse por acceder al almacén de datos. No debe ser responsable de hacer cumplir las reglas sobre los datos. Además, la interfaz de usuario debe ser responsable de actualizar los controles en la interfaz de usuario, obtener valores de la entrada del usuario y traducirlos a algo que la capa de dominio pueda usar, y nada más. Debe llamar a las operaciones proporcionadas por la capa de dominio para realizar las acciones necesarias (por ejemplo, guardar este archivo). Un servicio web que se llama debería ser responsable de convertir del medio de transmisión a algo que la capa de dominio pueda usar, y luego llamar a la capa de dominio (la mayoría de las herramientas hacen mucho de este trabajo por usted).
Esta separación, cuando se implementa adecuadamente, puede brindarle la capacidad de cambiar partes de su código sin afectar a otras. Por ejemplo, tal vez el orden de clasificación de una colección devuelta de objetos debe cambiar. Como sabe que la capa responsable de la manipulación de datos (generalmente la capa de lógica de negocios) maneja estas cosas, puede identificar fácilmente dónde se debe cambiar el código. Además de no tener que modificar cómo se recupera del almacén de datos, o de cualquiera de las aplicaciones que usan el dominio (la interfaz de usuario y el servicio web de mi ejemplo anterior).
El objetivo final es hacer que su código sea lo más fácil de mantener posible.
Como nota al margen, algunas cosas no se pueden encasillar en una capa específica del dominio (por ejemplo, registro, validación y autorización). Estos elementos se conocen comúnmente como preocupaciones transversales, y en algunos casos se pueden tratar como una capa que se mantiene por sí misma y que todas las otras capas pueden ver y usar.
Personalmente, creo que el enfoque en capas está desactualizado y que el enfoque de servicio es mejor. Todavía tienes la línea clara dibujada en la arena sobre quién hace qué, pero no te obliga a ser tan jerárquico. Por ejemplo, un servicio de orden de compra, un servicio de facturación y un servicio de envío, desde la perspectiva de la aplicación, todos estos servicios representan su dominio, y el aplazamiento de responsabilidad que describí anteriormente todavía es válido en este contexto, simplemente se ha modificado. que su dominio existe en múltiples lugares, utilizando aún más el concepto de separación de preocupaciones.