LINUX.ORG.RU

Про валидацию данных...

 


0

2

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

С одной стороны есть стандарт который говорит как должно быть, с другой стороны есть несколько велосипедов на дельфях которые уже используются (некоторые аж 15 годиков) и кое-что грубо нарушают. Юзеры страдать от этого не должны, но и поощрять нарушение стандарта не хочется.

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

Лепить проверки к многим функциям и полям? Скажем пусть у нас будет поле Email тогда делать функцию CheckEmail которая будет проверять email и возвращать true или false или делать email не полем а функцией SetEmail типа bool и возвращать false если вместо email-а написали «абырвалг» но в любом случае загружать этот «абырвалг» по крайней мере до тех пор пока не потребуется сохранять файл? Или вообще проводить только конечную проверку всего файла?

Понятно что с одним email-ом и разработчик клиентского приложения справился бы легко, но там таких полей штук 100 и далеко не каждый разраб готов всё это проверять со стороны готового приложения.

Да чтобы иметь представление, всё дело происходит на языке программирования C#, но писать проверки в сеттерах (что может придти в голову если читать по диагонали) я не должен, т.к. даже кривой файл надо бы уметь читать, так что сыпать эксепшенами при присвоении переменным значений не вариант.

★★★★★

С одной стороны есть стандарт который говорит как должно быть, с другой стороны есть несколько велосипедов на дельфях которые уже используются (некоторые аж 15 годиков) и кое-что грубо нарушают. Юзеры страдать от этого не должны, но и поощрять нарушение стандарта не хочется.

Если ИТ-стандарт расходится с ИТ-реальностью то это безусловно проблемы стандарта. Забей на него и делай так чтоб понимать реально существующие файлы. И вообще, в нормальных стандартах на формат всегда есть оговорка: при генерации, старайтесь быть максимально строгими, при парсинге - максимально толерантными (но не в ущерб функционалу).

Лепить проверки к многим функциям и полям? Скажем пусть у нас будет поле Email тогда делать функцию CheckEmail

Это и дальше совершенно непонятно без контекста. Если ты таки объяснишь, что за формат файла ты парсишь и для чего - наверно станет понятнее.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Описание надмозг конечно, два раза перечитал.

  • Иметь некую хню-1 которая просто хранит все поля (ваще отдельно просто хранит в себе и всё)
  • Иметь опционалюную хню-2 которой можно сказать, проверь чтобы поля А,Б,В,Г,Д были заполнены правильно, а если из них какие неверны верни мне их список. По итогу
что_то_главное_тут_делается(тут_что_то) // хня 1 собирает незаметно в себя инфу

// и теперь разраб может вызравать на своё усмотрение твой валидатор
тип массив = А,Б,В,Г,Д
if (вывод = проверить_поля(массив)) != ничего 
{
   вхиле ин вывод
   принты_попапы(ой поле вывод.имя имеет какашку в виде вывод.значение исправляйте )
}

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

Если один хрен так или иначе надо проверять данные, просто нет никакого смысла не писать валидатор так как его будут писать все полюбому, значит он просто должен быть, простой как палка при этом, кому надо гибкости и своего напишут свой, но практика показывает что в большинстве случаев нужно простое и топорное решение из коробки, а всё остальное это всё остальное.

Да пиши для 100 полей проверки, да хоть для 1000. При этом основной код засирать и не нужно, для это и нужна первах хня которая просто будет хранить значения и если нужно их проверять.

anonymous
()

Таким образом, проводить валидацию при чтении файла полностью согласно стандарту я не могу иначе я не буду читать файлы в которых нарушения незначительные.

Сделай два режима валидации — strict и stupid-users-shat-all-over-the-place.

theNamelessOne ★★★★★
()

Разбить на два стадии - чтение и валидацию. Причем валидация должна возвращать не true/false, а список проблем. После чего сделать маскирование нужного набора кривых полей - элементарщина.

Norgat ★★★★★
()

С одной стороны есть стандарт который говорит как должно быть, с другой стороны есть несколько велосипедов на дельфях которые уже используются (некоторые аж 15 годиков) и кое-что грубо нарушают.

Так сделай в либе 2 функции. Первая читает корректный файл и кидает ошибку если формат кривой. Вторая пытается пофиксить кривой файл, чтобы его можно было прочитать.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 2)

ИМНО никого поощрять ненужно (этот мир уже не спасти) - удобная либа должна читать как можно более расширенный (изуродованный) формат и делать это по возможности молча.

Если есть неоднозначности - о них надо сказать, и сказать как они разрешены (если они разрешены). Если они не разрешены то надо упасть с диким воплем разумеется.

Если либа будет сообщать о каких то потенциальных проблемах (например формат нарушен, мы его прочли но другие могут не понять) - наверное это хорошо, но сообщение должно быть отключаемо.

Как альтернатива мб опциональная настройка насколько педантично должен выдерживаться формат.

AntonI ★★★★
()

А как собственно по-феншую это делать?

Читайте файлы, но выводите предупреждения в лог о том что файл не валиден, проблема в строке такой-то.

Но я должен поощрить тех разработчиков которые разрабатывают продукт для конечного юзера

Отсутствие предупреждений в логах, вполне себе мотивация для адекватных разработчиков.

Obezyan
()
Ответ на: комментарий от Norgat

Где в ОП хоть слово про json?

Прямо в аббревиатуре, J вначале, просто ее поначалу плохо видно также как и А (Абстракции) в конце.

Obezyan
()
Последнее исправление: Obezyan (всего исправлений: 1)