tipos - Inyección de dependencia con objetos NHibernate
spring framework tutorial 2 (3)
Como nadie parece poder responder a su pregunta en este momento, pensé que recomendaría reestructurar su código para eliminar la necesidad de que la Orden calcule su propio impuesto.
Puede delegarlo en un OrderTaxService que toma un objeto Order y devuelve un objeto OrderValue o algo similar.
Esto mantendrá la lógica en su dominio pero eliminará la necesidad de adjuntarlo a sus objetos Order.
Me pregunto cómo decirle a NHibernate que resuelva las dependencias en mis objetos de dominio POCO.
Descubrí que los métodos como CalculateOrderTax deberían estar en el objeto Domain porque codifican las reglas comerciales específicas del dominio. Pero una vez que tengo dos de esos, estoy violando a SRP.
No sería ningún problema extraer esos métodos para las clases de Estrategia, pero me pregunto cómo hacer que NHibernate los cargue.
No parece una buena solución recorrer una lista de objetos en el repositorio para obtener / establecer la inyección de Dependecy basada antes de entregar el objeto a las capas superiores.
También estoy usando Castle Windsor para mi inyección de Dependencia en este momento.
Estoy de acuerdo con Garry en que debes eliminar las dependencias de servicio de tus objetos de dominio tanto como sea posible. A veces tiene sentido, como el cifrado / descifrado. En ese caso, puede ocultarlo en la infraestructura mediante la interceptación o IUserType. Creo que esto último es favorable cuando puedes usarlo. Este artículo muestra en detalle cómo hacerlo. Estoy haciendo esto y funciona bastante bien.
He estado usando interceptores para tareas similares:
Un interceptor que modifica las entidades cargadas:
public class MyInterceptor : EmptyInterceptor
{
public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
{
return InjectDependencies(entity as MyEntity);
}
}
Asociarlo con una sesión:
nhSessionFactory.OpenSession(myInterceptor);
También he leído en algún lado que habría un mejor soporte para la inyección personalizada de constructores en la próxima versión 2.1, pero parece que no puedo encontrar la referencia en este momento.