Pregunta

I puede ser condenado por una falta de coincidencia de impedancia, pero estoy tratando de conciliar ejemplos que he visto para IRepository y objetos inmutables.

Estoy trabajando en una aplicación de catalogación, donde hundrds de peticiones web operan en un 'conjunto de trabajo' de los productos. - un subconjunto de todo el catálogo tiende a estar en juego en un momento dado

Al mismo tiempo, nuestros equipos de datos en constante actualización de los datos del producto -. Nuevas imágenes, precios actualizados, descripciones, etc., etc.

Me parece que para un rendimiento estoy mejor considerar que un producto como inmutables. Se cargan y almacenan en caché por un repositorio y muchos hilos pueden estar accediendo al mismo objeto producto al mismo tiempo.

Sin embargo, esta idea parece roto con muchos de los ejemplos que he visto IRepository con Update / Delete métodos - tan pronto como un hilo puede escribir en un producto que parece que me abro hasta razas y otra porquería

Así que me imaginé un modelo 'editor', donde se realizan los cambios a través de una entidad 'editor' un compañero objeto que persiste entonces los cambios y obliga al producto en cuestión para ser recargado de usar para todos. Productos nunca se cambian -. Sólo 'editado' externamente y vuelve a cargar

¿Tiene esto algún sentido? ¿Puede este trabajo con un repositorio como he visto los describieron?

Gracias por su tiempo!

¿Fue útil?

Solución

Un repositorio sólo es responsable de la recuperación de datos / almacenamiento. Una fábrica es responsable de crear nuevos objetos.

En su caso, los objetos inmutables están bien. Sin embargo es necesario algún método para invalidar productos superseeded y eliminarlos de la memoria caché del repositorio. Cualquier referencia que cuelgan pueden despreciarse en la mayoría de los casos, ya que eran válidos en el tiempo de recuperación.

En el caso de un producto de actualización, necesita asegurarse de que se crea un nuevo producto a través de la fábrica. Su repositorio solamente incluiría tres tipos de operaciones: Recuperar (o Buscar), Save y sustituyen. Donde Guardar almacena un nuevo producto, que no cambia. Y sustituyen almacenaría el nuevo producto, invalidar el viejo y purgarlo de la caché.

En términos de una firma de C # que podía imaginar los dos métodos de almacenamiento para tomar el siguiente aspecto:

void Save(Product product);

void Supersede(Product oldProduct, Product newProduct);

Espero que esto ayude.

Otros consejos

¿Existen tales requisitos de alta concurrencia o de rendimiento que no se puede hacer bloqueo sencillo, ya sea exclusiva / pesimista o optimista?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top