2010-01-22 11 views
7

Tengo que diseñar una aplicación que es principalmente una interfaz con una base de datos para la entrada de datos. La aplicación debe poder funcionar mientras está desconectada de la base de datos con datos almacenados en caché e insertar esos datos cuando se vuelva a conectar. Habrá dos modos diferentes, conectados o desconectados, sin necesidad de detectar la desconexión en el medio de una sesión conectada para cambiar a desconectado.Patrón de diseño para una aplicación de base de datos que debe funcionar desconectado

Como esto me parece un requisito común, me preguntaba si existe un enfoque "estándar" para enfrentar este problema. Almacenamiento en caché de tablas en el archivo local, serialización de los datos consultados en la base de datos o lo que sea. Tal vez hay una biblioteca existente para hacer eso?

Gracias de antemano.

PD: La aplicación se llevará a cabo en .Net

EDIT: Es una aplicación Windows Forms, no una web uno.

EDIT2 EDIT2: para introducir más detalles sobre la aplicación es ingresar datos en una base de datos, pero a veces los usuarios estarán fuera de la oficina varias semanas y deberán ingresar datos como si estuvieran conectados con datos en caché de la base de datos y estos datos ingresados ​​se transferirán a la base de datos cuando vuelvan a conectarse.

Respuesta

3

El escenario que describes puede ser resuelto por la replicación de bases de datos. Por ejemplo, si está utilizando un servidor MS SQL como su Db C/S principal, puede replicarse en una instalación MSSQL Express local en su estación de trabajo o computadora portátil. Siempre que sus usuarios estén fuera de la oficina, la aplicación debe conectarse a la base de datos local y, al volver, los cambios se replican en la base de datos central. Creo que este es el enfoque "estándar" que está buscando, donde no tiene que escribir un código especial para su situación fuera de línea (excepto por el código que cambia la conexión, y algún código para iniciar la replicación).

Puede ser de interés para usted que el sistema CRM utilizado por nuestra empresa funcione así, la base de datos local utilizada es "motor de escritorio MSSQL", el predecesor de la edición Express, pero en mi humilde opinión debería funcionar con el Express edición, también. Por lo que yo sé, no tiene que pagar ningún arancel por las instancias de MSSQL Express.

+0

replicación de bases de datos sólo se suma al servidor principal o lo reemplaza? Necesito que todos los datos se agreguen al servidor de base de datos principal pero no se reemplacen. Por lo tanto, debo replicar el servidor principal en el servidor local en la conexión, pero simplemente agregar datos de local a principal cuando haya datos disponibles. –

+0

Si usted quiere que su aplicación tenga un comportamiento restringido como "añadir solamente" en modo desconectado, es obvio que tienen que lidiar con eso en la interfaz de usuario de la aplicación, que es algo que su base de datos no puede hacer por usted. Tenga una mirada en MSDN aquí http://msdn.microsoft.com/en-us/library/ms151329.aspx, para aprender más sobre la replicación de mezcla de SQL Server y la resolución de conflictos. –

0

Como ya se respondió, ado.net es una opción lógica.

http://msdn.microsoft.com/en-us/library/aa719836%28VS.71%29.aspx

El uso del adaptador de datos llenar conjunto de datos (en la memoria), utilice ese conjunto de datos mientras está desconectado, cuando se conecta la base de datos de actualización del adaptador de datos usando de nuevo.

+0

Creo que esto no se aplica a lo que he puesto en mi EDIT2, ¿no es así? –

0

No estoy seguro de si desea construir una aplicación web o de escritorio, pero las características out of browser de Silverlight también son muy bonitas. Link proporciona un punto de partida impresionante

+0

Es una aplicación estándar de WinForms, no relacionada con la web. –

+1

Memento es el patrón de diseño si eso es lo que quería saber ... así que cuando esté desconectado, tendrá opciones como 1. Desconectado ADO.net según lo publicado por Learning 2. Embebido RDBMS como SQLite 3. Embebido OODBMS como db40 o versant. – Perpetualcoder

+1

En modo conectado ... el cliente interactúa directamente con el servidor.En desconexión u necesitará para guardar los datos en uno de los 3 métodos o simplemente vieja serialización .net ... en el software de servidor de ur reconexión tendrá que ser capaz de consumir los datos del almacén de datos local – Perpetualcoder

0

es posible que desee ver en la forma en que Google engranajes está diseñado

+0

Mmm, creo que esto no tiene nada para hacer con el problema explicado aquí. –

+0

tiene algo que ver con el problema definido aquí. gears almacena en caché los datos de Internet (que podría ser una base de datos en línea) para el acceso sin conexión. los usuarios pueden realizar cambios en los datos en modo fuera de línea y los engranajes se sincronizarían con la fuente real la próxima vez que la conexión esté disponible. – Aadith

+0

incluso se podría considerar el uso de bases de datos en memoria como SQLite que podría actuar como caché para su base de datos principal. (De hecho, así es como funciona Google Gears). hay formas estándar de configuración de DB en la memoria como memoria caché para su base de datos principal – Aadith

Cuestiones relacionadas