Работаю я сейчас как консалтер на одной Успешной Фирме (ТМ). Из-за политики формы, пишущей свой софт руками ПОТУсторонних разработчиков (не в индустрии, Слава Яйцам!), авторов всего того, с чем приходится работать, днем с огнем не отыскать (чтобы дать волшебного пенделя) — на самой фирме сидят лишь саппортеры и кастомайзеры, т.е. документация пользователя для всего, что написано — очень подробная, но это не спасает от спагеттиобразного г-кода (или я даже тот ужас не знаю как назвать). Так вот, попался мне на глаза не виденный прежде класс, начал я его смотреть и обнаружил следующее (вы не поверите!
). Началось все с мелочей, как то: интерфейсы названы как попало, а классы реализующие эти интерфейсы, начинаются с буковки "I" (т.е. перепутаны правила, но это конечно фигня, хотя звоночек — если отдел QA положил болт на этот кусок софта и давно, то это о чем-то должно говорить. И то, что в продуктивную версию пошли результаты освоения разработчиками концепции интерфейсов — тоже о чем-то говорит, ну это тоже ладно — там до меня на шарпе плюсеры кодили — чего с них взять?
Эти страдальцы даже специальную иерархию Read-Only -классов написали, и нет же, чтобы доку прежде покурить — в Шарпе такая иерархия единственной командой в коллекции создается (3 раза ха!)). Вишенкой на торте является метод занимающий больше 3 тысяч строк и трижды в if'ах вызывающий сам себя с различными параметрами — превед хвостовая рекурсия!
Внутри себя метод использует шесть переменных-флагов — у меня ум за разум заходил, когда я пытался осознать их функциональность. Требуется (sic!) "существенно увеличить производительность системы" — ну вы понEли... Слово "рефакторинг" — запрещено! Xa-xa-xa! Да, на фирме все экстерны активно друг другу рассказывают про внедрение практик SOLID и непрерывной интеграции (Continuous Integration), даже сервер под это дело уже купили, прости Господи! 3аберите меня отсюда, пожалста!