Proxy de dados com análise de tinta
Conforme mencionado em Ink Analysis Overview, a tecnologia de análise de tinta mantém internamente um modelo de documento baseado em árvore para conter resultados de análise e relacionamentos. Se seu aplicativo já tiver um armazenamento de documentos estabelecido que seja diferente, você precisará usar os recursos de análise de tinta projetados para proxy de dados entre modelos de documentos diferentes.
Tipos de proxy de dados
Os recursos de proxy de dados permitem que seu aplicativo:
- Integre os dados dos resultados da análise novamente em um modelo de documento existente.
- Comunique os resultados anteriores (ou estado) de volta ao InkAnalyzer.
- Comunique o estado que não é de tinta para o InkAnalyzer.
- Comunique apenas o conjunto mínimo de dados (estado anterior e não à tinta) necessário para concluir a operação de análise.
- Atualize facilmente o modelo de documento de aplicação interna com os resultados da análise.
Há duas abordagens básicas para o proxy de dados de análise de tinta. As diferenças residem nos detalhes de quando e como ocorre a sincronização entre os modelos de documentos. A primeira abordagem, atualização síncrona, requer a modificação do modelo de documento de análise de tinta à medida que ocorrem alterações no documento do aplicativo. A segunda abordagem, atualização sob demanda, requer que apenas os dados afetados por alterações no modelo de documento do aplicativo sejam passados para o InkAnalyzer. Ou seja, apenas os dados para as partes do modelo de documento de Análise de Tinta que estão na mesma área que as modificações no documento do aplicativo precisam ser passados para o do InkAnalyzer conforme necessário.
Atualização síncrona
A abordagem de atualização síncrona requer a modificação (criação e exclusão) de nós no InkAnalyzer coleção de objetosContextNode doInkAnalyzer conforme ocorrem no documento do aplicativo. Por exemplo, cada vez que uma palavra de texto é adicionada ao aplicativo, um correspondente TextWord estilizado ContextNode é criado no InkAnalyzer . Se o local da palavra de texto na página mudar, o local do ContextNode correspondente será atualizado ao mesmo tempo. Esse método é menos eficiente em termos de recursos de computação do que o método sob demanda porque cada alteração de documento envolve uma atualização para o InkAnalyzer, mesmo que a alteração não afete a tinta que está sendo analisada.
O exemplo a seguir serve para mostrar como a atualização síncrona funciona. Imagine um aplicativo que tenha um modelo de documento existente. Quando o usuário final faz uma alteração no documento, como adicionar novo texto, a alteração é processada da seguinte maneira:
- O usuário final cria os novos dados.
- O aplicativo determina como processar os dados, armazena-os e os renderiza.
- Para efeitos práticos, as seguintes etapas ocorrem simultaneamente.
- O aplicativo coloca os dados em seu modelo de documento.
- O aplicativo cria um InkAnalyzer e o atualiza. Fazer isso simultaneamente garante que o InkAnalyzer sempre tenha as informações mais recentes.
- O aplicativo chama BackgroundAnalyze noInkAnalyzer para iniciar a análise.
- Uma série de eventos é acionada se a alteração envolver tinta e o InkAnalyzer determinar novos resultados. Um evento é disparado para cada alteração feita na coleção de objetos ContextNode no InkAnalyzer. Esses eventos incluem ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeletinge ContextNodeReparenting. O aplicativo manipula esses eventos para proxy os resultados da operação de análise de volta para o modelo de documento, conforme apropriado.
- O aplicativo atualiza o layout do documento, extraindo os novos dados do modelo de documento.
- Os novos dados são renderizados de volta para o usuário final.
Atualização sob demanda
A abordagem sob demanda requer apenas que os dados sejam passados para aqueles objetos ContextNode que estão nas áreas que estão sendo analisadas. Os objetos ContextNode necessários são extraídos do modelo de documento do aplicativo logo após a operação de análise ser invocada e, novamente, pouco antes de reconciliar os resultados. Embora seja mais complicada de implementar do que as atualizações síncronas, essa abordagem produz melhores resultados de desempenho.
Tópicos relacionados