es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Rust Rocket – Obteniendo conexión de base de datos fuera del controlador

Actualmente, al utilizar el marco de trabajo Rust Rocket, es necesario obtener la conexión de la base de datos a través del controlador. Básicamente, la conexión se le da a su controlador desde un grupo preconfigurado. Ahora tenemos que pasar esta conexión a cualquier estructura que necesite una conexión de base de datos.

Si quiero separar las responsabilidades de leer desde el almacén de datos, o potencialmente múltiples almacenes de datos si también hay almacenamiento en caché, entonces tendré que pasar una o potencialmente varias estructuras de conexión diferentes desde mi controlador hacia la capa inferior.

Si bien soy consciente de que puedo encapsular todas las conexiones en una única guarda de solicitud, no estoy satisfecho con la falta de abstracción. Siento firmemente que mi manejador no debería saber nada sobre la base de datos para mantener las responsabilidades separadas lo más posible.

¿Cómo procedería en Rust para obtener una conexión de algún grupo compartido de conexiones en un objeto, sin usar guardas de solicitud y sin pasar muchos argumentos?

Nota: La terminología puede ser incorrecta debido a mi experiencia limitada con Rocket.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto de TI especializado en Rust y en el marco de trabajo Rust Rocket, si desea obtener una conexión de algún conjunto compartido de conexiones en un objeto sin usar guardias de solicitud y perforación de argumentos, puede crear un módulo o servicio auxiliar que maneje las conexiones de la base de datos y exponga una API para obtener conexiones.

    Este módulo o servicio puede administrar un conjunto de conexiones de base de datos y proporcionar una forma de solicitar una conexión del conjunto. Puede utilizar una estructura de datos simple, como un vector, para almacenar las conexiones e implementar un mecanismo para asignar las conexiones en orden de llegada o utilizar una biblioteca de agrupación de conexiones más avanzada que admita agrupación de conexiones, como r2d2.

    Luego, en su controlador Rocket, puede utilizar este servicio para obtener la conexión a la base de datos que necesita. Puede inyectar este servicio en su aplicación Rocket como un estado administrado y utilizarlo para obtener una conexión siempre que la necesite, sin tener que pasar el objeto de conexión.

    Este enfoque le ayudará a mantener una clara separación de responsabilidades entre su controlador y la capa de base de datos, lo que hará que su código sea más modular, más fácil de probar y más escalable.

Comments are closed.