Не повторять себя или быть более ясным, повторяя себя? - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть этот базовый класс ниже:

abstract class RequiredString {

    protected readonly string _text;

    public RequiredString(string name, string text)
    {
        if (string.IsNullOrWhiteSpace(text))
            throw new TextEmptyException($"The '{name}' field is required");

        _text = text;
    }

    public RequiredString(string name, string text, int maxLength): this(name, text)
    {
        if (_text.Length > maxLength)
            throw new TextLengthTooLongException($"The '{name}' field length is too long ({text.Length}/{maxLength})");
    }

    public static implicit operator string(RequiredString field)
    {
        return field._text;
    }

}

У меня есть дюжина классов, которые наследуются от базового класса.Все имеют максимальную длину: например:

public sealed class Email : RequiredString
{
    private const int Length = 255;
    private const string Name = "Email";

    public Email(string text) : base(Name, text, Length)
    {
        try
        {
            new MailAddress(_text);
        }
        catch (FormatException ex)
        {
            throw new EmailFormatException($"'{_text}' field is not a valid email string", ex);
        }

    }

    public static implicit operator Email(string text)
    {
        return new Email(text);
    }
}

Допустим, читатель проверяет класс Email и не видит базовый класс.

Понятно ли ему / ей, что проверка длины происходит в базовом классе?Имеет ли это смысл или я должен поставить проверку длины в каждом унаследованном классе?Как бы вы изменили этот код, чтобы сделать его чище?

Спасибо!

...