Как стать автором
Обновить

Комментарии 22

Ссылка «MoreView #13» ведёт на «MoreView #12»

Поправил, спасибо

По-моему, статья "Почему плохо надеяться на БД для валидации данных" — это из вредных советов.

Почему?

1 — NULL/NOT NOT, unique, fk — это все не только бизнес логика, но и технические ограничения. Позволяющие лучше понять, как разработчику, так и СУБД как лучше (правильнее) работать с данными.
2 — Если у приложения несколько интерфейсов, то и бизнес требования на каждом из них могут отличаться. СУБД тут может выступать арбитром в принятии конечного решения, проходят ли данные или нет.
3 — Иногда данные таки приходится править через различные db viewer-ы, да или даже миграции, где ты их вносишь в обход валидаций уровня приложения. Те же foreign keys или unique таким образом можно легко нарушить.
4 — В целом, зачем тогда реляционная СУБД? Все скатывается в NoSQL и контроль данных на уровне приложения.

РСУБД для джойнов

1.1 Пример автора статьи, по валидация уникальности, ломается конкурентными запросами, но он об этом узнает не сразу

Потому что автор слишком уж узко мыслит.


Валидность данных не должна зависеть от какого-то там условного ларавеля. Сегодня это только ларавел, завтра к нему добавились дотнет и питон. А послезавтра автор запушил релиз с багом в валидаторе и как наташины котики уронил вообще всё.


Уникальные и внешние ключи, NOT NULL и прочее — они не только про валидацию, они ещё и про построение модели данных, которой очень охотно пользуется оптимизатор.


Так что я на 100% согласен с предыдущем комментарием — советы очень вредные, особенно для использования в больших системах. Сначала автор не описал в СУБД модель данных, через полгода появилась необходимость создать парочку реплик базы, потому что всё тормозит, через год у вас в штате уже есть табунчик девопсов. Зато DDD и феншуй.1)


1) Феншуй в понимании его автором статьи с вредными советами.

НЛО прилетело и опубликовало эту надпись здесь

Может быть, но вот тут как раз соглашусь с автором статьи, что хранимки лучше избегать и использовать только, если по-другому никак.

Надеяться на БД в вопросе валидации данных действительно плохо, по-моему. Но ограничения уровня БД полезны как последний рубеж защиты от ошибок (или выбранных компромиссов) программиста (не пользователя). Попытки нарушения схемы БД должны отдавать 500 в контексте HTTP, а не 400 за редкими исключениями когда ради нефункциональных требований типа быстродействия приходится идти на возможные ошибки в SQL типа unique constraint violation, чтобы не лочить таблицы на запись.

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

$a = "9"
$a > 100 // true - php 8
$a > 100 // false - php 7


Это же ломает вообще всё…

нет, "9" это числовая строка и все работает по прежнему

В PHP 8, при сравнении чисел и строк с помощью нестрогого == оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.

0 == 'foobar' теперь официально false.

Теперь собеседующим придётся указывать версию языка в вопросах о нестрогом сравнении =)
А такой вопрос еще задают на собеседованиях? Вроде нулевые уже давно прошли.

Нет. Теперь собеседующие будут ставить минус, если собеседуемый не спросил "а мы покупаем или продаём какая версия?"

А мне нравится идея изменить оператор подавления ошибок на @@, а одиночную собаку использовать для аннотация. И пусть это будет хоть в 8.1, хоть в 9. Доктриновские аннотации всем хороши и вводить их в синтаксис языка — не более, чем блаж, без которой спокойно можно обходиться еще пару лет. Так что не стоит торопиться и уродовать и без того не самый лаконичный язык кривым синтаксисом аннотаций.

Это просто праздник какой-то, особенно про сравнение. Дело даже не в том, что более ожидаемый результат будет, а в том, что ломают BC в одной из "духовных скреп" PHP, что означает, что и другие 'столпы" не так твёрдо стоят. Глядишь и дойдём до строго динамически типизированного интерпретируемого языка

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации