Умный в гору не пойдёт

Болтовня / 2017 Nov 25

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

Попробую описать свою мысль с помощью примеров. Если в коде кто-то использует старомодный подход, то это нормально. Мне все равно, каким образом человек ищет минимальный элемент в списке - с помощью LINQ или простым перебором с помощью классического цикла. 

Но меня бесит, когда код работает неожиданным образом. На работе произошёл случай, что система построения отчетов по разному относится к данным с периодом действия. Например, если у меня в таблице есть записи с полями StartDate и EndDate и я фильтрую по EndDate, то движок автоматически будет проверять, что EndDate должна быть не только в будущем, но может быть и пустой. В случае со StartDate автоматически ничего не происходит.

 

Я написал команде, которая отвечает за отчеты, что с помощью трех строчек кода можно исправить ситуацию и все будет работать одинаково, ведь нужно просто скопировать строки, которые создают магию для EndDate и чуть подправить. Мне сказали, что это потребует полное тестирование текущих отчетов и это делать не будут. 

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

Во-вторых, на мой взгляд странный результат на много страшнее. Клиенты могут строить свои отчеты и они должны знать такие детали, что если фильтруют по StartDate, то нужно добавлять проверку на null, а в случае c EndDate этого не нужно. 

Причем в случае с EndDate нужно быть более внимательным, ведь бывают случаи, когда клиенту нужно найти записи, у которых есть дата окончания действия, но она в будущем. По аналогии со StartDate они могут написать - StartDate > Now, но это работать не будет, потому что правильно StartDate > Now and StartDate is not null. 

Чтобы уж совсем быть четким, посмотрим на StartDate на примере. Если нужно найти все в прошлом, то народ будет писать StartDate < Now, но это не включит нулевые строки, поэтому правильно StarDate < Now ort StartDate is null. 

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

 

Комментарии

Kastor

Михаил, на сколько вообще в Канаде (по твоему мнению и опыту) развито написание тестов, разработка по TDD, CodeReview и т.п. практики?
Неужели в Канадских конторах все так же говнокодят как и у нас,, забивая болт на тесты, SOLID и т.п.?

Михаил Фленов

В каждой конторе по-разному, так что есть все.

Николай

А как вы относитесь EDA? читаемость сильно понижается, но со стороны архитектуры почти идеально

Михаил Фленов

Не очень.


Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне