Обновить
42
0
Igor Chakrygin@Ordos

.NET Developer

Отправить сообщение
конфиг сдесь вообще не нужен
что там хранить? Есть конкретная форма, в ней конкретное поле конкретно проверяется конкретной цепочкой проверок: о)

Это же просто аналог конструкции if-else-if-else-…
.Validate(x => x.Length > 0, GetText(«Empty Field»)) //Собственно достать конкретное сообщение для текущей культуры
С выносом текстов проблемм нет, все эти проверки появляются в конечном продукте.
можно вместо текста ошибки возвращать некоторый строковой код, главное чтобы в программе были определены методы, которые ошибку будут обрабатывать
Эти методы будут вызываться в делегатах (ActiononSuccess, ActiononFailure)

Цепочка проверок никаким образом не зависит от того что проверяется и какие ошибки при этом возникают
Согласен, но я преследовал две цели:
1) Сократить наисание рутиного кода (Первую я всегда преследую)
2) Иметь возможность передавать методы валидации как параметры в другие методы. (Это мне сейчас особо нужно) А другим способом собрать единый метод валидации из нескольких составных частей я не вижу.
Вообще, я так предполагаю, эти проверки должны осуществляться только когда пользователь нажал на кнопку «Выполнить», «Отправить», «Зарегистрироваться» и в случае успеха выполнить какое-то действие.

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

Поэтому сдесь чётко: Есть ошибка — выполнить то-то, нету ошибки — то-то
никаких проблемм, вам же всё равно значения собирать нужно в некоторых переменных:

var success = true;

string password;

Validation.Validate(
PasswordTB.Text, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели пароль»)
.Validate(x => IsValidPassword(email), «Неверный пароль»)//Тут вообще могут идти проверки на длину, сложность итд.
v => { password = v.Value; },//При успешной проверке сохраняем пароль
e => { ShowError(e.Message); success = false });//При неуспешной показываем ошибку

if(!success) return;

string passwordConfirm;

Validation.Validate(
PasswordTBConfirm.Text, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели подтверждение пароль»)
.Validate(x => x == password, «Подтвержение не верное»),
v => { passwordConfirm= v.Value; },//При успешной проверке сохраняем подтверждение
e => { ShowError(e.Message); success = false });//При неуспешной показываем ошибку
Вообще есть два типа проверок: проверка предикатом и проверка на возможность преобразования.
проверка регуляркой может быть записана и так:

var regex = new Regex(«Тут регулярка для логина»);

Validation.Validate(
login, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели логин»)
.Validate(x => regex.Match(step.Value).Success, «Введён некорректный логин»)
ниже написал, как проверить, проверка же осуществляется функцией вида string -> bool, соответственно и проверка будет:

login, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели логин»)
.RegexValidate(«Тут регулярка для логина», «Введён некорректный логин»)
.Validate(x => !IsUsedLogin(login), «Такой логин уже есть»),
null,
e => { ShowError(e.Message); success = false });
Я не предлагаю новых способов проверки, я предлагаю немного изменить запись

bool success = true;

Validation.Validate(
email, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели емейл»)
.Validate(x => IsValidEMail(email), «Это не емейл»)
.Validate(x => !IsUsedEmail(email), «Нет пользователя с таким адресом»)
null, e => { ShowError(e.Message); success = false });

if(!success) return false;
string email = «pupkin@yandex.ru»
if(email.Length = 0)
{
Error.Text = «Вы не ввели емейл»;
return;
}
else if(IsValidEMail(email))
{
Error.Text = «Это не емейл»;
return;
}
else if(!IsUsedEmail(email)) //Если нужно проверить, что юзер с таким адресом есть
{
Error.Text = «Нет пользователя с таким адресом»;
return;
}
Можно и даже наверное нужно, но (ещё раз говорю) как правило нужно производить несколько проверок и выдавать сообщение об ошибке в зависимости от этапа проверки.

например проверка емейла в вашем варианте будет иметь вид:
Смысл в том, что если пользователь, например, не введёт логин вообще, то ему нужно выдавать не сообщение о том что «введён неправильный логин» а о том, что «Вам необходимо ввести логин» или «Вы забыли ввести логин»

В ValidationExtensions можно добавить и метод проверки регулярных выражений:

public static ValidationStepRegexValidate(this ValidationStepstep,
string regexString, string message)
{
var regex = new Regex(regexString);
if(regex.Match(step.Value)) return step;
else throw new ValidationException(message);
}

Тогда функция авторизации пользователя будет выглядеть так:
bool Auth(string login, string password)
{
bool success = true;
Validation.Validate(
login, value => value.Validate()
.Validate(x => x.Length > 0, «Вы не ввели логин»)
.RegexValidate(«Тут регулярка для логина», «Введён некорректный логин»),
null,
e => { ShowError(e.Message); success = false });

if(!success) return false;

//Дальше проверяем пароль
}

Просто иногда число проверок может быть не две, как тут, а пять и более (при каждой должно выдаваться своё сообщение), тогда такая запись оазывается и понятнее и короче.
Основной идеей является сократить код, который в любом случае придётся писать, до минимума, чтобы с одного взгляда было понятно, что значение проверяется сначала на пустоту, потом на то, что оно является целым, а затем, что оно принадлежит некоторому интервалу.

Главное, что так можно организовать проверку любого значения на любые условия.
По-моему это не совсем то. Я не говорю о проверке параметров метода. Я говорю именно о проверке значений, введёных пользователем в некую форму и сопоставление каждой проверке некоторого сообщения, которое должно выдаваться пользователю если он ввёл неверное значение.
К тому же (при регистрации пользователя например) может проверяться то, что ещё не известно до проверки.
Думаю пользователь не поймёт юмора, если ему написать «Введите корректный логин, который ещё не используется»
Что именно нужно вводить должно быть указано рядом, например:
Введите число от 0 до 10: [ А тут текст бокс ]
Но это уже дело разработчика.

Мой вариант только проверяет то, что пользователь введёт.
Мне кажется, для Microsoft это, вобщем то, плюс. Если разработчики могут писать совместимый софт, то для его использования будет использоваться именно Windows.
Человек тебе предложил свой вариант, нисколько его не навязывал. А ты «человек не любит критеку»…
Где-где-где?: о)
Может кто-нибудь в друх словах объяснит, что такое F#, для чего он нужен, какие имеет преимущества и как его использовать? Будьте добры: о)
Сколько телефонов нужно было скурить, чтобы до такого добуматься…
Может лучше делать сигареты из пресованиых телефонов? Может число курящих снизится: о)

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность