При использовании фабрики валитаров мы получаем готовый объект, состоящий из необходимых в нашем случае валидаторов. С точки зрения разработчика, для валидации данных нужно будет вызвать всего один метод Validate. А вызывать валидаторы по очереди не всегда удобно. А если их 5, 10 20? Проще 1 раз написать фабричный метод, чем постоянно писать ненужные строки кода.
Например, нужно провалидировать анкету перед сохранением в базу, которую заполнил пользователь. У вас есть фабричный метод: GetFormValidator(параметры). Дёргаете этот метод и получаете результат валидации. Всё. Я считаю, это очень удобно.
Что касается обработки ошибок, то обычно этот процесс заключается в том, чтобы уведомить пользователя о проблемах ввода. Например, слишком длинное имя пользователя, неправильный e-mail. Провалидировав данные, вы получаете плоский список всех ошибок, которые небольшим вспомогательным классом можно поставить в соответствие текстовые сообщения для уведомления.
На работе под XP аутлук 2007 с базой ~ 2х тысяч писем открывается минуты 2. На висте секунд 15. Один комп, разные ОС. Фотошоп, студия, и другие продукты запускаются и работают быстрее.
Что касается «топа», то в корне с вами не согласен.
Core 2 Duo с 1.6 — 1.8 Ghz, 1-2 GB ОЗУ уже далеко не редкость в наше время. И стоит такой компьютер не дорого, а виста работает на нём отлично. Топом такая конфигурация была 2 года назад.
Действительно, видно многим людям хорошо кто-то промыл мозги по поводу висты. Говоришь «у меня дома виста стоит», на тебя смотрят, как на вич положительного.
Не согласен с п 3 — «Vista слишком медленная».
По личным тестам, да и тестам некоторых товарищей, виста работает в разы быстрее на ресурсоёмких приложениях, надёжнее и стабильнее.
Считаю, что использование Exception'ов для таких операций, как проверка логина и пароля при регистрации пользователя не совсем корректна. Для этих целей лучше использовать какие-нибудь кастомные классы, например OperationResult и ResultCode примерно так:
public OperationResult RegisterUser(string username, string password, string email) {
var operationResult = OperationResult.SuccessfulResult;
if (/*проверяем username*/)
operationResult.AddResultCode(ResultCode.UserNameError);
if (/*проверяем password*/)
operationResult.AddResultCode(ResultCode.PasswordError);
if (/*проверяем email*/)
operationResult.AddResultCode(ResultCode.EmailError);
}
На выходе метода мы получаем результат операции и ошибки, если они были. Как видно из кода OperationResult содержит в себе коллекцию возможных ошибок и по умолчанию результат выполнения операции успешен.
Мне такой способ нравится больше, хотя бы потому, что если вдруг на сервере забыли поймать Exception, то всё свалится. А разве невалидный логин является критической ситуацией? Думаю нет. Это ошибка валидации. Тут нужно чётко отделять валидацию данных и критические ситуации (нет доступа к бд, null exception и т. д.).
И ещё немного про предложенную валидацию:
Считаю, что лучший вариант — это использование фабрики валидаторов, построенных по паттерну композит. Каждый валидатор проверяет на свои условия и возвращает результат проверки главному объекту. В итоге мы получим результат проверки со всеми ошибками, если они произошли.
«Гораздо лучше русскому человеку(не привыкшему) воспринимается «Исключение», а не «Exception».»
Возможно. Но тогда между новичками и «бородатыми» программистами будет вестись очень сложный диалог. Из-за таких вот терминов. Сами знаете, у людей вырабатывается профессиональный сленг.
Возьмём пример:
технология .net reflection. В нашей команде обычно употребляем «рефлекшн». После такой привычки очень сложно понять человека, который говорит про какую-то рефлексию (а такой перевод в одной из книжек по .net'у я видел).
Опять же, каждый автор может по-разному переводить термины на русский язык. Человек читает книгу, термин Exception там будет переведён как «исключение», в другой как «ошибка». А в русской студии ещё как-нибудь назовут. Что получится в итоге?
В английском интерфейсе термины трактуются однозначно, русский приведёт к путанице.
«Таким образом следующая за триграфом ??/ строка будет добавлена к комментарию (действие „\“ обратного слеша)».
Вот Visual C++ и хавает следующую строку с циклом. И получается 11. Не думаю, что это большая проблема.
Например, нужно провалидировать анкету перед сохранением в базу, которую заполнил пользователь. У вас есть фабричный метод: GetFormValidator(параметры). Дёргаете этот метод и получаете результат валидации. Всё. Я считаю, это очень удобно.
Что касается обработки ошибок, то обычно этот процесс заключается в том, чтобы уведомить пользователя о проблемах ввода. Например, слишком длинное имя пользователя, неправильный e-mail. Провалидировав данные, вы получаете плоский список всех ошибок, которые небольшим вспомогательным классом можно поставить в соответствие текстовые сообщения для уведомления.
Что касается «топа», то в корне с вами не согласен.
Core 2 Duo с 1.6 — 1.8 Ghz, 1-2 GB ОЗУ уже далеко не редкость в наше время. И стоит такой компьютер не дорого, а виста работает на нём отлично. Топом такая конфигурация была 2 года назад.
Действительно, видно многим людям хорошо кто-то промыл мозги по поводу висты. Говоришь «у меня дома виста стоит», на тебя смотрят, как на вич положительного.
По личным тестам, да и тестам некоторых товарищей, виста работает в разы быстрее на ресурсоёмких приложениях, надёжнее и стабильнее.
К примеру я прицепился сильно, просто наболело)
public OperationResult RegisterUser(string username, string password, string email) {
var operationResult = OperationResult.SuccessfulResult;
if (/*проверяем username*/)
operationResult.AddResultCode(ResultCode.UserNameError);
if (/*проверяем password*/)
operationResult.AddResultCode(ResultCode.PasswordError);
if (/*проверяем email*/)
operationResult.AddResultCode(ResultCode.EmailError);
}
На выходе метода мы получаем результат операции и ошибки, если они были. Как видно из кода OperationResult содержит в себе коллекцию возможных ошибок и по умолчанию результат выполнения операции успешен.
Мне такой способ нравится больше, хотя бы потому, что если вдруг на сервере забыли поймать Exception, то всё свалится. А разве невалидный логин является критической ситуацией? Думаю нет. Это ошибка валидации. Тут нужно чётко отделять валидацию данных и критические ситуации (нет доступа к бд, null exception и т. д.).
И ещё немного про предложенную валидацию:
Считаю, что лучший вариант — это использование фабрики валидаторов, построенных по паттерну композит. Каждый валидатор проверяет на свои условия и возвращает результат проверки главному объекту. В итоге мы получим результат проверки со всеми ошибками, если они произошли.
А там будет поддержка MUI? Хочешь — русская версия, не хочешь — английская.
Возможно. Но тогда между новичками и «бородатыми» программистами будет вестись очень сложный диалог. Из-за таких вот терминов. Сами знаете, у людей вырабатывается профессиональный сленг.
Возьмём пример:
технология .net reflection. В нашей команде обычно употребляем «рефлекшн». После такой привычки очень сложно понять человека, который говорит про какую-то рефлексию (а такой перевод в одной из книжек по .net'у я видел).
Опять же, каждый автор может по-разному переводить термины на русский язык. Человек читает книгу, термин Exception там будет переведён как «исключение», в другой как «ошибка». А в русской студии ещё как-нибудь назовут. Что получится в итоге?
В английском интерфейсе термины трактуются однозначно, русский приведёт к путанице.
Вот Visual C++ и хавает следующую строку с циклом. И получается 11. Не думаю, что это большая проблема.
Просто убивает, когда делают 10мпх фотоаппараты с матрицами 1/2.5".