Re[2]: Валидация данных
От: Аноним  
Дата: 09.05.10 16:36
Оценка:
Здравствуйте, vbarhatov, Вы писали:

V>Здравствуйте, Аноним, Вы писали:


А>>Например нужно проверить что пароль имеет длину >8 символов, а также в нем нет каких-то специфических символов, а также последовательность символов не совпадает с последовательностью клавиш на клавиатуре, содержит обязательнои цифру и символы разного регистра....


V>Столкнулся сейчас с точно такой же задачей. Пока реализовано так же, как у Вас.


V>Сейчас прикинул... А если отделить логику от кода, и скажем, записать все условия отдельно в xml? Можно использовать регулярные выражения.


V>На крайний случай, если у нас есть несколько регулярных выражений, то скрипт для клиента можно и сгенерировать



По идее так и есть, обобщенный вариант решения — нужно создать некий универсальный язык и 2 транслятора, один в код C# ( код серверного приложения ) другой в JavaScript ( код клиентского приложения ). Код трансляторов будет написан 1 раз и зафиксирован, причем трансляцию можно проводить перед компиляцией веб-приложения, тем самым не будет издержек производительности.

Как вариант можно взять один из уже существующих языков, например клиенский или серверный.

Учитывая что язык JavaScript не типизирован строго, а C# типизирован, то проще переводить из C# в JavaScript;
Например
bool IsValid( string text )
{
   if ( text.Length < 8 )
     return false;
}


в Javascript перевести легко, просто убрав типы
function IsValid( text )
{
   if ( text.Length < 8 )
     return false;
}


обратно же перевести затруднительно, т.к. тип полей можно определить уже только по семантике текста , по производимым операциям.
С другой стороны в C# может использоваться оператор или метод который не преобразуется в JavaScript, например string.Split(','), поэтому тут накладывается ограничение на испольуемые в C# функции.

Отсюда получается следующее решение :
— использовать для создания алгоритма валидации C# или другой язык на стороне сервера, как правило строго типизированный, вынести данную реализацию в отдельные классы и файлы. Например
.\Validators\validatorlogin.cs
.\Validators\validatorpwd.cs

— создать утилиту которая преобразовывает метод IsValid класса из C# в соотвветсвующую функцию JavaScript, например в validatorlogin_IsValid()
— настроить сборку чтобы сначала запускалась утилита и генерила соответстующий js файл validators.js
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.