Pregunta

Muy bien, así que estoy diseñando un servicio Web independiente (utilizando Restlet como mi marco). Mi aplicación se divide en 3 capas:

  • capa de datos (justo por encima de la base de datos, proporciona APIs para la conexión a / consulta de base de datos, y un objeto de base de datos)
  • capa de objetos (responsable de la serialización de la capa de datos ... ofrece objetos que la capa de cliente puede utilizar sin preocuparse de base de datos)
  • capa de cliente (Esta capa es el servicio web Restlet ... básicamente sólo crea objetos de la capa de objetos y cumple solicitud de servicio web)

Ahora, para cada objeto se crea en la capa de objeto, quiero usar diferentes credenciales (para que pueda sandbox cada objeto ...). La capa de objeto no debe conocer las credenciales exactas (es decir, el usuario / PW / DB URL, etc.).

¿Cuál sería la mejor manera de manejar esto? Estoy pensando que debería tener un objeto de base de datos super clase en mi capa de datos ... y cada subclase contendrá el registro de información de conexión necesaria ... de esta manera mi capa de objeto, simplemente puede ir Database db = new SubDatabase(); y luego seguir utilizando esa base de datos.

En el nivel de cliente, que sólo serían capaces de ir ItemCollection items = new ItemCollection(); y no tienen idea / control sobre la base de datos que se conecta.

Lo pregunto porque estoy tratando de hacer mi extensible de la plataforma, para que otros puedan crear fácilmente servicios fuera de mi plataforma.

Si alguien tiene alguna experiencia con estos problemas arquitectónicos o cómo manejar este tipo de cosas te agradecería alguna idea o consejo ...

No dude en hacer preguntas si esto es confuso. Gracias!

Mi plataforma es de Java, el marco REST que estoy usando es Restlet, mi base de datos es MySQL.

¿Fue útil?

Solución

Me siento lo que explicó es sensata y que está tratando de no exponer los detalles de bases de datos y credenciales a nivel cleint.

En esta situación, es necesario pensar en cualquier patrón de diseño que pueden ayudarle No puedo pensar en el patrón Singleton, donde se crea una instancia y lo utiliza en la capa de objetos, evitando así mostrar ningún detalle acerca de los credentails y URL a los usuarios.

La segunda opción, lo que me pasa en mi mente es el uso de la capa de hibernación, que le ayudará a ocultar los detalles y simplemente acceder a los objetos ORM y se puede conseguir lo que busca.

Otros consejos

Mi sugerencia es utilizar JTA donde se puede utilizar más de una base de datos con el número respectivo de fuentes de datos. se puede hacer referencia aquí para obtener más información https: //test.kuali .org / confluencia / pantalla / KULRICE / origen de datos + y + + Configuración JTA

Me hago eco de los comentarios de @ Saugata. Mira primavera e inyectar su implementación fuente de datos (o talones para las pruebas!) A su capa de objetos en su primavera configuración. Esto debería ayudar a su arquitectura general de aplicación en un número de maneras:

  1. Usted será capaz de cambiar las bases de datos (ya sean casos o implementaciones) sobre la marcha sin volver a compilar el código.
  2. Vas a abstraer la fuente de datos completamente de su implementación -. Lo que le permite cambiar una base de datos para un servicio web, la aplicación de colas, o un talón
  3. desacoplamiento su solicitud de esta manera, será más fácil para poner a prueba.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top