Валидация WPF: разбор кода Гоши Дударя и лучшие практики

Данный анализ посвящен коду валидации полей ввода, представленному в видео Гоши Дударя о разработке WPF-приложений. Представленный подход к валидации признан неэффективным и содержащим ряд существенных недостатков. Анализ направлен на демонстрацию путей улучшения кода, повышения его чистоты, поддерживаемости и расширяемости.

Проблемы исходного кода

Исходный код демонстрирует типичные примеры плохого программирования:

  • Дублирование кода: Наблюдается значительное дублирование кода, особенно в правилах валидации. Это затрудняет поддержку и увеличивает вероятность ошибок при модификации.
  • Магические числа: Использование числовых констант без явного семантического значения затрудняет понимание и снижает гибкость кода.
  • Отсутствие структуры и слоёв: Код лишён чёткой структуры и разделения на слои, что снижает читаемость и затрудняет тестирование.
  • Неадекватное форматирование: Плохое форматирование дополнительно ухудшает читаемость.

Улучшение кода: устранение дублирования

Для улучшения кода предлагается устранить дублирование путём создания метода MarkInvalid, помечающего элементы управления невалидным состоянием. Это упрощает код и повышает его поддерживаемость, облегчая локализацию кода, изменение цветов и другие модификации.

Улучшение кода: обработка растущей сложности

Добавление новых правил валидации (например, проверка совпадения паролей и валидация email-адресов) требует применения паттерна Builder и интерфейсов. Однако, для полного решения проблемы необходим более масштабный архитектурный пересмотр, включающий использование модели данных и связывание валидации с моделью.

Реализация валидации с использованием методов расширения

Для упрощения доступа к объектам валидации предлагается использовать методы расширения для TextBox и других элементов управления WPF. Это позволяет вызывать методы валидации непосредственно из объекта управления. Валидатор реализован как набор методов, возвращающих ссылку на сам объект, что позволяет использовать цепочки вызовов. При неудачной проверке элемент управления подсвечивается красным, и в tooltip отображается соответствующее сообщение.

Сравнение с исходным кодом

Предложенный подход к валидации, хотя и не идеален с архитектурной точки зрения, значительно превосходит исходный код по читаемости и поддерживаемости. Разработка предлагаемого варианта заняла около 5 минут, в то время как подход Гоши Дударя, ориентированный на простоту восприятия для новичков, жертвует качеством кода.

Подход Гоши Дударя к обучению программированию критикуется за недостаточное внимание к качеству кода и архитектурным принципам. Преподавание таких методов в коммерческих курсах за значительную плату расценивается как не соответствующее базовым стандартам, даже университетским. Качество кода в видео сравнивается с уровнем ученика 8 класса.

Что будем искать? Например,программа