Этот подход ужасен по нескольким причинам:- Функцией всё равно никто не будет пользоваться. Если другому программисту из вашей команды понадобится открыть файл, он скорее напишет две примитивные строчки заново, чем будет вспоминать где лежит ваша «высушенная версия».
- Это порождает неконсистентность и следует из предыдущего пункта. Теперь по коду разбросаны вызовы read_file или work_with_file вперемешку с обычными with open. Python — язык про консистентность, у нас даже правила расстановки пробелов вокруг знака = приведены к единому стандарту. А в вашем коде появилось сразу два способа открывать файлы.
- Функция просто повторяет интерфейс контекстного менеджера open. По сути вы не пишете новую функцию. Вы пытаетесь «завелосипедить» стандартный open. В сущности ничего нового вы не сделали, вызов вашей work_with_file ничем не отличается от вызова open, кроме того, что он на 1 строчку короче.
Зачем вообще нужен принцип DRY? Чтобы
упростить и ускорить разработку, сделать её более стабильной. Если избавление от копипасты начинает противоречить этим целям, принцип применять не надо. Repeat Yourself, если это сделает работу с кодом проще для вас и команды.
DRY призывает создавать
дополнительные абстракции. Каждая функция или класс в коде – это
абстракция, которая объединяет строчки, написанные внутри, общим названием. Создание новых функций требует от вас дать им новые названия, иногда даже заводить новые понятия и термины.
Попытка использовать принцип DRY заставила вас собрать код в новую абстракцию: функцию, которая работает с файлами. В данном случае она была бесполезна, потому что
абстракция была слишком тонкой, то есть объединяла в себе слишком мало концепций: только чтение из файла и запись в файл. Обе эти абстракции хорошо известны почти любому разработчику, и их использование отточено временем и опытом. Создание новой абстракции ничего не упростило, при этом заблокировало использование старых, хорошо знакомых абстракций. Отсюда и сопротивление в команде: человеку куда проще пользоваться знакомыми инструментами, чем осваивать новый, особенно когда пользы от нового никакой.
Такая ошибка похожа на создание «универсальных инструментов» вроде «молотка с функцией микроскопа». Если вам кажется заманчивой идея использовать эти инструменты, предлагаю задуматься, почему их не продают в магазинах :D