Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Painel
titleVisão Geral

Qualquer aplicativo que aceite entrada de usuários deve garantir que a entrada seja válida. Um aplicativo pode, por exemplo, verificar se a entrada que contém apenas caracteres em um intervalo específico, tem um determinado comprimento ou corresponde a um formato específico. Sem validação, um usuário pode fornecer dados que causam falha no aplicativo. A validação adequada impõe regras de negócio e pode ajudar a impedir que um invasor injete dados maliciosos.

No contexto do padrão Model-View-ViewModel (MVVM), um Model ou ViewModel geralmente será necessário para executar a validação de dados e sinalizar quaisquer erros de validação para a View para que o usuário possa corrigi-los. A imagem abaixo mostra as classes envolvidas no processo de validação.

Image Modified

As propriedades do ViewModel que requerem validação são do tipo ValidatableObject<T>, e cadainstância ValidatableObject<T> tem regras de validação adicionadas à suapropriedade Validations. A validação é chamada do ViewModel chamando ométodo Validate dainstância ValidatableObject<T>, que recupera as regras de validação e as executa napropriedade ValidatableObject<T>.Value. Quaisquer erros de validação são colocados napropriedade Errors dainstância ValidatableObject<T> e apropriedade IsValid dainstância ValidatableObject<T> é atualizada para indicar se a validação foi bem-sucedida ou falhou. O código a seguir mostra a implementação do ValidatableObject<T>:

Bloco de código
languagec#
themeRDark
titleC#
using CommunityToolkit.Mvvm.ComponentModel;

namespace RMLib.Validations;

public class ValidatableObject<T> : ObservableObject, IValidity
{
  private IEnumerable<string> _errors;
  private bool _isValid;
  private T _value;

  public List<IValidationRule<T>> Validations { get; } = new();

  public IEnumerable<string> Errors
  {
    get => _errors;
    private set => SetProperty(ref _errors, value);
  }

  public bool IsValid
  {
    get => _isValid;
    private set => SetProperty(ref _isValid, value);
  }

  public T Value
  {
    get => _value;
    set => SetProperty(ref _value, value);
  }

  public ValidatableObject()
  {
    _isValid = true;
    _errors = Enumerable.Empty<string>();
  }

  public bool Validate()
  {
    Errors = Validations
        ?.Where(v => !v.Check(Value))
        ?.Select(v => v.ValidationMessage)
        ?.ToArray()
        ?? Enumerable.Empty<string>();

    IsValid = !Errors.Any();

    return IsValid;
  }
}

Clique para acessar o arquivo

A notificação de alteração de propriedade é fornecida pelaclasse ObservableObject e, portanto, umcontrole Entry pode se vincular àpropriedade IsValid dainstância ValidatableObject<T> na classe do ViewModel para ser notificado se os dados inseridos são válidos ou não.

...