Como você mantém a lógica de exibição fora do modelo e lógica de negócios fora do modelo de exibição em MVVM?

StackOverflow https://stackoverflow.com/questions/900991

Pergunta

Não consigo bastante descobrir como obter o modelo de vista para ser notificado de mudanças no modelo sem adicionar um monte de coisas específicas UI como INotifyProperyChanged e INotifyCollectionChanged no meu modelo ou criar toneladas de eventos diferentes e fazer um monte de coisas que sentir como eles estão específica e UI deve ficar fora do modelo.

Caso contrário, eu só tenho que duplicar toda a lógica de negócios no modelo de exibição para garantir que tudo está atualizado, e, em seguida, que é o ponto de ter o modelo então?

Um dos mais difíceis que eu tenho no meu modelo é uma propriedade de uma "categoria" de classe. Você pode pensar nisso como uma estrutura de árvore e a propriedade é todos os descendentes nó folha. Bem no modelo que a propriedade é gerado em tempo real de forma recursiva através de tudo o que é as crianças, o que é muito bom e correto. O modelo de exibição no entanto precisa se ligar a essa propriedade e precisa saber quando ele muda. Devo apenas mudar o modelo para acomodar a visão de modelo? Se eu fizer isso, então o modelo de exibição realmente não faz nada neste momento, o modelo levanta todas as notificações necessárias de mudanças ea vista pode apenas se ligam directamente para o modelo. Além disso, se o modelo era algo que eu não tenho a fonte para, como eu resolver isso?

Foi útil?

Solução

Eu discordo que INotifyPropertyChanged e INotifyCollectionChanged são específicos de UI. Eles estão em namespaces e conjuntos que não estão ligados a qualquer pilha UI particular. Por esse motivo, tipicamente colocar esse tipo de comportamento tão baixo no sistema quanto possível (normalmente a camada de dados).

Se houver algum motivo você não quer colocá-lo nesse nível, isso é bom. Você pode colocá-lo em um nível mais elevado, como o serviço ou camada de interface do usuário. No entanto, você precisa ter certeza de todas as alterações às estruturas de dados ocorre através dessa camada também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top