Listas de objetos de valor en diseño controlado por dominio distribuido

Necesito una guía tangible sobre la implementación de la lista de objetos de valor en mi aplicación DDD distribuida. Esto es lo que tengo:

Mi aplicación se basa en una aplicación de servicio RESTful que se ejecuta en un servidor que proporciona servicios a varias aplicaciones cliente. Una de mis entidades, Cliente, tiene una propiedad de Región que contiene una referencia a uno de los muchos tipos de valor de Región. La lista de regiones se almacena en la base de datos de back-end, pero NO proporcionamos una interfaz para mantener esta lista. Cualquier cambio se realizará directamente en la base de datos (ya que será muy poco frecuente) y lo más probable es que se trate de cambios de nombre y no de agregar / eliminar. En ocasiones, como la expansión a un nuevo mercado, se podría agregar un nuevo artículo, por lo que el requisito de que la lista sea "dinámica".

Al editar un registro de Cliente en una de las IU de cliente, necesito mostrar la lista de Regiones en una lista desplegable con el elemento seleccionado asociado con la propiedad Región del objeto de dominio del Cliente.

Puedo manejar el lado de la interfaz de usuario, pero no estoy seguro de cómo se debe obtener y mantener la lista de regiones en mi capa de dominio. ¿Tengo un RegionRepository separado o debo recuperar la lista del CustomerRespository? ¿Qué pasa si el Cliente es la única entidad que hace referencia al Objeto de valor? Si varias entidades hicieran referencia a la VO, ¿cambiaría eso el enfoque?

De hecho, tengo muchos de estos tipos de búsquedas y no quiero crear un repositorio (y un servicio web) por separado para cada uno a menos que se recomiende. He pensado en un único servicio de búsqueda para la API, pero dudo en implementarlo hasta que tenga una mejor comprensión del impacto que tendrá esta ruta.

Si bien los elementos de la lista están 'codificados', no se ajustan a la definición de una entidad con su propia identidad y no existen excepto en el contexto del objeto de dominio principal (en este caso, Cliente). Así que supongo que son objetos de valor, lo cual está bien. Pero, de nuevo, no tengo claro cómo debería estructurar mi aplicación para permitir que los clientes recuperen la lista de VO para un escenario como el que describí anteriormente.

preguntado el 16 de mayo de 11 a las 17:05

2 Respuestas

Puede colocarlos en cualquier lugar que tenga sentido. Donde elija exponer la propiedad e implementar el repositorio no va a romper ningún pacto de DDD.

Como ejemplo, utilizo lo siguiente:

interface IAddress
{
    List<State> GetStatesByCountry (string country);
}

y yo tambien tengo

interface ITaxes
{
    List<State> GetStates ();
}

En mi caso, ambos se implementan mediante un ILookupRepository simplemente porque así es como está diseñado ese sistema de backend en particular. Sin embargo, en otro de nuestros sistemas tenemos un ICountryRepository real porque tanto el backend como los servicios son diferentes del sistema anterior y tiene más sentido para ese escenario.

contestado el 16 de mayo de 11 a las 21:05

Mi opinión es que cuando expone una colección como una propiedad de un objeto, existe la presunción de que los resultados están de alguna manera en el contexto del objeto principal. Dado eso, asumiría que ITaxes.GetStates () devolvería una lista de estados donde ese impuesto es aplicable y no necesariamente una lista de los 50 estados. ¿No estás de acuerdo? - SonOfPirate

Encontré que la clave de este problema fue dar un paso atrás y evaluar en qué contexto existe realmente la lista de búsqueda. Por ejemplo, una lista de regiones puede ser territorios de ventas, regiones geográficas, etc. La identificación de esto generalmente me ha llevado a otro objeto de contexto con la lista existente como un niño.

respondido 17 nov., 11:19

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.