Perdóneme si lo siguiente parece demasiado general, pero traté de mantenerlo en un nivel alto para que coincida con su pregunta. No sé si lo que estás buscando se llamaría un "patrón de diseño" per se. Parece que estás buscando un paradigma/sistema de sincronización. Tenga en cuenta que mi suposición en esta respuesta es que necesita tener capacidades tanto en línea como fuera de línea para su aplicación (ya que mencionó explícitamente la sincronización). Si me equivoco, hágamelo saber.
En particular, lo que probablemente esté buscando generalmente se implementa usando dos cosas: 1) una base de datos "distribuida" (una que funciona sin conexión en las aplicaciones cliente como las aplicaciones móviles, así como en cualquier servidor) y 2) un mecanismo de sincronización y resolución de conflictos.
Un buen ejemplo de esto es la herramienta de gestión de código fuente Git. Git tiene las dos características antes mencionadas. Primero, utiliza una base de datos (por ejemplo, un sistema de archivos del proyecto git) distribuible (por ejemplo, el proyecto puede clonarse desde la estación de trabajo de un desarrollador a otro y trabajar de forma independiente). Segundo, tiene un mecanismo de sincronización y mecanismo de resolución de conflictos. Es decir, si intento sincronizar (por ejemplo, extraer cambios) de la estación de trabajo de un colega, las diferencias entre su código y mi código pueden combinarse (ya sea automáticamente o manualmente)
Otro ejemplo, y quizás más relevante para tu aplicación, es Evernote. Si no me equivoco, Evernote usa el mismo tipo de paradigma (una base de datos de archivos sin formato) para sincronizar documentos, y tiene clientes de escritorio, un sitio web y clientes móviles.
Esto no quiere decir que deba utilizar una base de datos de archivos sin formato. Podrías usar fácilmente una base de datos relacional u otra. Además, dependiendo del tipo de datos que intente almacenar y sincronizar, es posible que pueda salirse con una resolución de conflictos muy simple. (Por ejemplo, si solo está almacenando actualizaciones de estado, conteos de votos, etc., tal vez simplemente elija la entrada más nueva en la base de datos.)
En pocas palabras, las herramientas que he mencionado parecen seguir este tipo de flujo de trabajo:
- Al iniciar una sesión en la aplicación cliente, sincronice o "actualice" el cliente al conectarse y extraer nuevos datos. Aquí es donde identifica y resuelve conflictos entre los datos en el cliente y lo que está en el servidor o "nube".
- Editar o crear datos "fuera de línea" en el cliente, ya sea en el sitio web, aplicaciones móviles, etc.
- Sincronizar o "actualizar" la nube por ir en línea y empujando los datos ha cambiado
¿Quiere decir * configuración de la aplicación * para una aplicación que está disponible tanto en línea como aplicación nativa en varios dispositivos?Si no, ¿de qué tipo de * configuraciones * estás hablando? De ser así, ¿qué tipo de aplicación es, y solo desea sincronizar 'configuración' (se supone que es una pequeña cantidad de objetos de datos simples) o datos de aplicación más complejos? – Ergwun
Sí configuración de la aplicación como múltiples "Me gusta" y "No me gusta" de varias cosas bastante simples cadenas de objetos básicamente. En una aplicación para consumidores disponible en varios dispositivos en línea y fuera de línea. Algo así como lo hace MobileMe o incluso la sincronización de Google. No se puede garantizar que un dispositivo esté en línea y sincronizándose todos los días y las cosas se agregarán y eliminarán en cada dispositivo – Dan