Я нормально отношусь к обходным путям в коде, если результат остается читаем и понятным. Но если обходной манёвр делает код или результат неожиданным, то это раздражает.
Попробую описать свою мысль с помощью примеров. Если в коде кто-то использует старомодный подход, то это нормально. Мне все равно, каким образом человек ищет минимальный элемент в списке - с помощью 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.
Ради того, чтобы не заморачиваться, мне предложили не исправлять код, а обойти гору. Только в случае с кодингом не всегда правильно выражение - умный в гору не пойдет, умный гору обойдет. Иногда нужно идти в гору и исправлять такие мелкие недочеты, которые приводят к большим конфузам.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Михаил, на сколько вообще в Канаде (по твоему мнению и опыту) развито написание тестов, разработка по TDD, CodeReview и т.п. практики?
Неужели в Канадских конторах все так же говнокодят как и у нас,, забивая болт на тесты, SOLID и т.п.?
В каждой конторе по-разному, так что есть все.
А как вы относитесь EDA? читаемость сильно понижается, но со стороны архитектуры почти идеально
Не очень.
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.