He estado estudiando arquitectura de cebolla por un par de días. Entiendo que las dependencias siempre deben ir hacia el centro y cómo usar la inyección de dependencia para lograr esto. Pero tengo un par de preguntas que aún no pude descifrar.cómo implementar servicios y repositorios en arquitectura de cebolla?
¿Puede un modelo (o entidad) hacer referencia a una interfaz de repositorio o una interfaz de servicio?
Por ejemplo: una entidad
Order
tiene una relación establecida a través deDeliveryCity
Oder.DeliveryZip
propiedad, que es no una clave externa, pero es único. Para llegar a la Ciudad por una cremallera, debo llamarICityRepository.FindByZip(zip)
Tengo el siguiente código en mi modelo
class Order { . . . [Inject] public ICityRepository CityRepository { get; set; } private City _dCity; public City DeliveryCity { get { if (_dCity == null) _dCity = this.CityRepository.FindByZip(this.DeliveryZip); return _dCity; } } . . . }
¿Cuáles serían los problemas del código anterior? ¿Debería usar un servicio de dominio en su lugar?
¿Deben definirse las implementaciones de servicios de dominio dentro del núcleo o en la capa de infraestructura?
¡Tiene perfecto sentido! Me pregunto "¿cómo podría extrañar eso?" ¡Gracias! – svallory
Esto es un error. La fábrica de DDD no es responsable de la reconstitución. Reconsitución es la vida media de un objeto. Factory solo se preocupa por el comienzo de la vida. Por favor, consulte esta respuesta: http://stackoverflow.com/a/10264669/625332 – Dmitry
No estoy de acuerdo. Las fábricas se utilizan para crear instancias de un objeto. Pueden estar al comienzo del ciclo de vida de un objeto o usarse para la reconstitución. Pueden ser la misma clase con dos métodos o dos clases diferentes. De cualquier manera, estoy de acuerdo en que hay una diferencia en cómo se comporta la fábrica en cada caso. Normalmente tengo la fábrica de reconstitución como una dependencia del repositorio que delega en la fábrica para crear y reconstituir la nueva instancia con los datos recuperados del almacén de datos. Para obtener más información, vea Evans pg 145: "Reconstitución de objetos almacenados" – SonOfPirate