• Авторизация


бюрократия и правосознание 16-09-2008 02:10 к комментариям - к полной версии - понравилось!


Рабочее. Взял пофискить ерундовый баг: некая операция (назовем ее для краткости "Ы") выполняется неправильно. По ходу выяснилось, что операция неправильно выполняется двумя разными неправильными способами в двух разных модулях (назовем их "мУ", "мЮ"). Однако операция не то чтобы уникальная, а скорее однотипная - в программе есть, скажем, десять тысяч мест, где выполняется операция Ы, конечно, с различными параметрами. Из них семь тысяч раз - через вспомогательный модуль "бЯ", и три тысячи - через вспомогательный модуль "бЕ". Оба способа - и "бЯ" и "бЕ" - кривые по той причине, что реализация "бЯ" не может быть вызвана из "мУ", а реализация "бЕ" - из "мЮ". Хоть плачь.
Варианты развития событий:

в1: Пофиксить баг раздельно в мУ и мЮ, продублировав свой фикс два раза. Через полгода очередной программист будет исправлять очередной баг в операции "Ы", он напишет в своем ЖЖ ровно такой же пост и помянет меня нехорошим словом.

в2: Написать новый вспомогательный модуль бШ, который можно будет вызывать хоть из мУ, хоть из мЮ, хоть откуда - и пофиксить через него. Итого в программе будет уже три вспомогательных модуля (бЯ, бЕ, бШ), которые делают одно и то же. Через полгода очередной программист добавит четвертый модуль, потом пятый, и постепенно вся программа будет состоять из однотипных вспомогательных модулей - алфавита не хватит.

в3: Написать модуль бШ, и переделать десять тысяч вызовов бЯ, бЕ на вызов бШ. Через полгода ничего страшного не произойдет, но исправление бага вместо двух часов займет три дня, а программист, который будет делать code review (обзор доработок в коде) однозначно повесится.

Как говорилось выше - хоть плачь.
вверх^ к полной версии понравилось! в evernote
Комментарии (5):
Создать отдельно стоящий класс, делающий то, что должны по идее делать бЯ и бЕ, и свободный от багов и ядерного оружия. Унаследовать новые бЯ и бЕ из соответственно бЯ и бЕ, а также вышеупомянутого класса. В заголовке нового класса жирно откомментировать проблему, там же обозвать нехорошим словом китайца, который эту проблему зачал.

PS: Чур, по голове не бить - последний раз я писал ОО код лет десять назад. :)
ujeen 16-09-2008-17:37 удалить
Да, формально это решит проблему, но основная функциональность бЯ и бЕ - доступ к неким справочникам, которые они держат в разных местах на разных носителях, так что один не имеет доступа к справочникам другого (хотя справочники однородные) - соответственно, придется делать интерфейс, описывающий собственно доступ и реализовывать его в бЯ, бЕ - а это 90 процентов ихнего кода.

Я написал новый модуль бЯ2, который симулирует бЯ, но может быть вызван из мУ и мЮ и вызвал его из обоих мест.

На практике оказалось, что я слегка ошибся и наврал в условии: вызовов бЯ оказалось не 3000, а всего 12. Остальные 2900 с хвостиком используют доступ к другом справочнику, который в данной ситуации не нужен.

То есть сам бЯ с точки зрения работы с этими справочниками не сегодня-завтра (как руки дойдут) просто перестанет существовать в природе, и жизнь наладится.
Возможно, мои взгляды и терминология устарели лет на 10-15, но почему у вас внешними справочными ресурсами не занимаются специализированные синглтоны? В годы моей объектно-ориентированной юности именно с их разработки все проекты и начинались. Как говорил мой начальник лет 15 назад, "не бывает кода грязного настолько, чтобы его нельзя было закрыть в приватном методе синглтона". (с)
ujeen 16-09-2008-22:07 удалить
бЯ2 именно специализированный синглетон и есть. бЯ, вероятно, задумывался в том же ключе, но судя по истории разработки в свн, потом кто-то увлекся интерфейсами, зачем-то написали вторую, отличную от бЯ реализацию, потом в новом модуле кто-то не смог (из-за угрозы лавины межпакетных связей) дотянуться до бЯ и сделал по-своему.
Вот за это я и не люблю ни "шарпея", ни "кофейник". Невозможность наследовать имплементацию возмущает мою сиплюсплюсовскую душу. :)


Комментарии (5): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник бюрократия и правосознание | ujeen - Аутливинг | Лента друзей ujeen / Полная версия Добавить в друзья Страницы: раньше»