Какова цель суффиксов .RequiredError, .FormatError и т. Д. - PullRequest
0 голосов
/ 13 июня 2009

Читая исходный код Oxite, я обнаружил, что валидаторы сохраняют неверное имя свойства с некоторыми суффиксами (RequiredError, MaxLengthExceededError, InvalidError, FormatError)

validationState.Errors.Add(CreateValidationError(user.Name, "Name.RequiredError", "Name is not set"));

validationState.Errors.Add(CreateValidationError(user.Name, "Name.MaxLengthExceededError", "Username must be less than or equal to {0} characters long.", 256));

validationState.Errors.Add(CreateValidationError(user.Email, "Email.InvalidError", "Email is invalid."));

Какова цель чьих суффиксов? Как они использовали?

1 Ответ

1 голос
/ 13 июня 2009

Я предполагаю, что это постоянные, удобные для машины значения, которые можно использовать для уникальной идентификации ошибки и для извлечения локализованных ресурсов для вашего глобализированного сайта.


Я хороший догадчик:

    protected ValidationError CreateValidationError(
        object value, string validationKey, string validationMessage, 
        params object[] validationMessageParameters)
    {
        if (validationMessageParameters != null && 
            validationMessageParameters.Length > 0)
        {
            validationMessage = string.Format(
              validationMessage, validationMessageParameters);
        }

        return new ValidationError(
            validationKey,
            value,
            new InvalidOperationException(
              localize(validationKey, validationMessage))
            );
    }

    private string localize(string key, string defaultValue)
    {
        if (phrases == null)
            phrases = localizationService.GetTranslations();

        Phrase foundPhrase = phrases
          .Where(p => p.Key == key && p.Language == site.LanguageDefault)
          .FirstOrDefault();

        if (foundPhrase != null)
            return foundPhrase.Value;

        return defaultValue;
    }

Любопытно, хотя. Поскольку исключения обычно не должны быть локализованы.

...