Trata-se de mais um bloco de código reutilizável e um conjunto de exemplos que demonstram como fazer aplicações que funcionam online e offline. Com este bloco a aplicação consegue detectar o estado da ligação, guardar dados em cache para utilização offline, e sincronizar dados e tarefas com os servidores assim que a aplicação ficar online.
O objectivo é fugir dos modelos de merge-replication (tightly-coupled) e desenhar sim interacções baseadas em mensagens (SOA) desacopladas. Esta framework usa um mecanismo de store & forward para guardar as mensagens pendentes. Desta forma muitas das complexidades deste tipo de aplicação ficam praticamente transparentes para o developer.
Para trabalhar offline o DataLoaderManager faz download dos dados de referencia necessários. Depois o ReferenceDataCache é usado sempre que o acesso online não está disponível.
Durante o funcionamento offline também é possível preencher tasks (UIP) e a sua efectivação (ex: post para um Web Service) fica queued no Application Service Agent até o ConnectionManager determinar que é possível fazer o upload dos dados.
Acho que este bloco vai ser uma excelente framework não só para aplicações rich-client/mobile mas até mesmo para construir Autonomous Services. Imaginem uma loja online (reference data = catálogo de produtos) que está a aceitar encomendas (task = carrinho de compras) mesmo quando os servidores (armazém/distribuição) estão indisponíveis. Existem muitas aplicações web que ficariam muito mais robustas e escaláveis se o site fosse fácil de replicar por data centers remotos. E o resultado das aplicações fosse uma simples menssagem para um web service assíncrono.
O source code foi desenvolvido neste workspace e bloco já está no msdn para download.