У меня есть код, который должен делать очень похожие вещи как в Windows, так и в Linux. К сожалению, мне требуется несколько системных функций (например, скрытые файлы: Python кросс-платформенный скрытый файл ). Каков наилучший способ написания кода для удобочитаемости и удобства обслуживания?
В настоящее время в коде используется множество операторов if
, которые ведут себя по-разному на разных платформах. Другой подход, который я рассмотрел, состоит в том, чтобы разделить код на две отдельные функции, одну для Windows и одну для Linux, но это будет означать обновление основной части кода в двух местах.
Обратите внимание, что основная частькод значительно длиннее и сложнее, чем этот.
Комбинированный подход (лучшая ремонтопригодность, но множество операторов if
):
import os
def sort_out_files():
if is_linux:
do_linux_preparations()
else:
do_windows_preparations()
# Main part of the code:
for file in os.listdir(folder):
if is_correct_file(file):
if is_linux:
do_main_actions_for_linux()
else:
do_main_actions_for_windows()
if is_linux:
do_linux_tidying_up()
else:
do_windows_tidying_up()
Отдельный подход (требуется больше обслуживания, но меньше if
требуемые операторы):
import os
def sort_out_files_linux():
do_linux_preparations()
# Main part of the code:
for file in os.listdir(folder):
if is_correct_file(file):
do_main_actions_for_linux()
do_linux_tidying_up()
def sort_out_files_windows():
do_windows_preparations()
# Main part of the code:
for file in os.listdir(folder):
if is_correct_file(file):
do_main_actions_for_windows()
do_windows_tidying_up()
def sort_out_files():
if is_linux:
sort_out_files_linux():
else:
sort_out_files_windows()
Функции do_preparations()
и do_tidying_up()
включают копирование файлов, извлечение и т. д.
is_correct_file()
проверяет, что файл имеет правильное имя иправильная временная метка.
do_main_actions()
включает анализ, перемещение и сокрытие файлов.
Оба приведенных выше примера работают, но не выглядят как самый Pythonic или лучший подход к долговременному сопровождению кода.