Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Como o atributo [necessário] interage com tipos anuláveis ​​na API MVVMCROSS


Como o atributo [necessário] interage com tipos anuláveis ​​na API MVVMCROSS


O atributo `[exigido]` em C# é usado para garantir que uma propriedade seja fornecida ao desserializar dados, como do JSON. No entanto, quando combinado com tipos anuláveis, pode parecer contra -intuitivo porque os tipos anuláveis ​​podem ser nulos. Essa combinação é frequentemente usada para proteger contra ataques subestimados, onde um usuário malicioso pode omitir uma propriedade em uma solicitação, fazendo com que o fichário do modelo atribua um valor padrão em vez de levantar um erro [4].

No contexto do MVVMcross, que é uma estrutura para a criação de aplicativos de plataforma cruzada usando o padrão Model-View-ViewModel (MVVM), a interação entre o atributo `[necessária]` e tipos anuláveis ​​não é diretamente abordada. O MVVMcross se concentra principalmente na ligação e navegação de dados entre visualizações e modelos de visualização. No entanto, entender como os tipos anuláveis ​​funcionam em C# pode ajudar os desenvolvedores a gerenciar a consistência e a validação dos dados em seus aplicativos MVVMCROSS.

Entendendo tipos Nulláveis

C# 8.0 Introduziu tipos de referência anuláveis, permitindo que os desenvolvedores indiquem explicitamente se um tipo de referência pode ser nulo. Esse recurso ajuda a evitar exceções de referência nula, fornecendo avisos em tempo de compilação quando os valores nulos não são tratados corretamente [7]. Ao usar tipos anuláveis ​​com o atributo `[Necessário]`, o atributo garante que um valor seja explicitamente fornecido, enquanto o tipo anulado permite a possibilidade de o NULL ser uma entrada válida em determinados cenários [4].

usando [obrigatório] com tipos anuláveis

Em cenários em que você precisa aplicar que uma propriedade é fornecida, mas também permita que ela seja nula (por exemplo, para lidar com cargas úteis JSON, onde uma propriedade pode ser explicitamente definida como nula), o uso do `[necessário]` atributo com tipos anuláveis ​​pode ser benéfico. No entanto, essa abordagem se aplica principalmente à validação de dados em APIs da Web ou contextos similares, em vez de diretamente no MVVMCROSS.

Para aplicações MVVMCROSS, garantir que as propriedades sejam adequadamente inicializadas e validadas nos modelos de exibição. Embora o MVVMCROSS não interaja diretamente com o atributo `[Necessário]` de uma maneira única, os desenvolvedores podem aproveitar os tipos de referência Nullable de C#e os atributos de validação para gerenciar a integridade dos dados em seu aplicativo.

Validação personalizada em mvvmcross

Se você precisar aplicar regras de validação específicas em um aplicativo MVVMCROSS, considere implementar a lógica de validação personalizada em seus modelos de visualização. Isso pode envolver a verificação de valores nulos ou garantir que certas propriedades sejam preenchidas antes de prosseguir com a lógica de negócios. O MVVMCROSS fornece mecanismos para ligação de dados personalizados e manuseio de interação, que podem ser usados ​​para implementar essa validação [5].

Em resumo, enquanto o atributo `[exigido]` e tipos anuláveis ​​são usados ​​principalmente em contextos de validação de dados, como APIs da Web, a compreensão de sua interação pode ajudar os desenvolvedores do MVVMCROSS a gerenciar a consistência e a validação de dados em seus aplicativos. No entanto, o próprio MVVMcross não possui suporte interno específico para o atributo `[Necessário]` da maneira que a Web Frameworks pode.

Citações:
[1] https://stackoverflow.com/questions/47074979/mvvmcross-view-model-mvxinteraction-is-always-null
[2] https://dev.to/theramoliya/c-required-attribute-for-nullable-reference-types-44hb
[3] https://www.reddit.com/r/csharp/comments/10wayn5/required_attribute_and_null_help/
[4] https://stackoverflow.com/questions/43688968/what-does-it-mean-for-a-property-to-be-required-and-nullable
[5] https://www.mvvmcross.com/documentation/advanced/custom-data-binding
[6] https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
[7] https://devblogs.microsoft.com/dotnet/embranco-nullable-reference-types/
[8] https://www.reddit.com/r/blazor/comments/14x5krd/nullable_types_and_required_keyword_how_is/