Cambie las entidades de seguimiento de varias fuentes en el diseño basado en dominios

Actualmente estoy en el proceso de desarrollar una aplicación web bastante grande y estoy usando un diseño basado en dominios.

Actualmente me he encontrado con algunos problemas con el seguimiento de los cambios en mi entidad Producto. La cuestión es que los productos se construyen en parte a partir de datos en SQL Azure, en parte a partir de datos en Azure Table Storage. Si se cambian ciertas propiedades, tendré que persistir en ambas, otros cambios solo en una.

Como resultado, no puedo usar NHibernate o Entity Framework para realizar un seguimiento de los cambios. Por ejemplo, el argumento del precio en el

    public void AddPrice(Price price)

El método en la entidad Producto debe persistir en SQL Azure, se realizarán cálculos en un rango de precios y el resultado se guardará en Azure Table Storage.

Como resolverias esto?

Pensamientos:

1) Pensé en implementar mi propio rastreador de cambios basado en Castle.DynamicProxy, pero parece bastante tedioso.

2) Implementar eventos internamente en las entidades del dominio. Esto no es bueno.

preguntado el 22 de mayo de 12 a las 16:05

2 Respuestas

Es posible que no sea una buena idea distribuir una entidad en varias tiendas persistentes. Para ser más precisos, podría significar que no es la misma entidad y podría dividirse en partes más pequeñas y diseñadas con mayor precisión.

se realizarán cálculos sobre una gama de precios

¿Está seguro de que estos cálculos afectan a la entidad del Producto y deben ser manejados por la misma sesión de NHibernate/EF utilizada en el repositorio del Producto? Dado que deben almacenarse en otro lugar, ¿no constituyen una noción de primera clase en el lenguaje ubicuo, lo que da como resultado una entidad separada con una lógica de persistencia propia?

Vea http://ayende.com/blog/153699/ask-ayende-repository-for-abstracting-multiple-data-sources

contestado el 23 de mayo de 12 a las 09:05

Gracias por hacérmelo claro. La razón para usar Azure Table Storage es por motivos de rendimiento. Lo que haré es usar siempre SQL Azure para conservar mi modelo de dominio y hacer que un servicio de infraestructura de algún tipo cree las entidades de almacenamiento de tablas basadas en SQL Azure. Esto también funciona perfectamente en conjunción con el patrón CQRS (martinfowler.com/bliki/CQRS.html). - borgcc

¿Qué hacen los ORM? Toman una copia de los datos que se utilizan para restaurar su objeto a su estado actual, justo antes de entregarle una referencia al objeto. Cuando se ha aplicado el comportamiento al objeto y solicita conservarlo, el ORM comparará su copia de los datos con los datos actualmente dentro del objeto y eliminará los cambios en consecuencia. porque no hacer lo mismo? La única diferencia es que no todos los cambios detectados se descargarán en el mismo almacén de datos.

HTH.

Por cierto, ¿hay alguna concurrencia aquí?

contestado el 23 de mayo de 12 a las 06:05

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