2010-06-26 6 views

Respuesta

1

Si la clase DB está construido para conectarse únicamente a una sola base de datos, tendrá problemas cuando se tiene una secuencia de comandos que necesita para conectarse a 2 dos bases de datos separadas. Sin embargo, podría compilar la clase singleton para aceptar múltiples configuraciones de servidor y luego administrarlas dentro del singleton.

De lo contrario, el diseño de una clase de base de datos como un conjunto unitario es una práctica que tiene mucho sentido, ya que se puede mantener un estricto control sobre el número de conexiones de un guión está haciendo en un momento dado.

+0

Cuando se tiene que tratar con múltiples bases de datos, a continuación, utilizar el patrón de diseño "Registro" (que se parece a una matriz asociativa Singleton), y utilizar el conexión DSN como clave de registro. – greg0ire

+0

El patrón de registro es una solución horrible. Solo use un multitón y proporcione pares de clave/valor (donde la clave es el nombre de la conexión, por ejemplo, "conexión_1" y el valor es la información de conexión (nombre de usuario/contraseña, host, nombre de la base de datos, etc.) y tenga todos sus objetos de conexión almacenados dentro del multitón. Los objetos de registro realmente no tienen cabida en ninguna parte, ya que son poco más que variables globales glorificadas. – Adrian

+0

@Adrian, estoy totalmente de acuerdo. El objetivo de utilizar un patrón singleton/multiton es evitar, a toda costa, crear una segunda conexión db dentro del mismo script. El patrón del Registro simplemente no parece resolver ninguno de los problemas aquí presentados. –

1

Esto hace que sea difícil de ejecutar pruebas unitarias en contra de ella y también hace que sea imposible tener múltiples conexiones de bases de datos. Como todos sabemos, las variables globales tienen muchos inconvenientes y los Singleton no son una excepción, solo que son una variable global más "amigable".

Encontré un muy buen article al respecto y un viejo SO question también.

+0

Creo que te refieres a "conexiones de bases de datos múltiples" por página, ¿no? – greg0ire

+0

Sí, eso es cierto. Si no estoy usando singleton, termino teniendo, con la aplicación que estoy desarrollando, al menos 4 conexiones de base de datos en cada punto de tiempo. Me preguntaba qué es menos problemático ... – Ricardo

+0

@greg: Sí, al menos con un clásico 'getInstance()' Singleton. ¿Tal vez el póster está buscando algo así como un grupo de conexión de base de datos? –

1

No es posible utilizar dos conexiones de bases de datos. Usted quiere esto porque:

  • que tienen dos bases de datos.
  • que quieren hacer algo dentro de una transacción cuando otra transacción ya se está ejecutando en la conexión de base de datos 'actual'.
  • desea utilizar varias instancias de base de simulacros en su equipo realiza un test
Cuestiones relacionadas