Очистка вложенных операторов if-elif с использованием шаблона проектирования стратегииPython

Программы на Python
Anonymous
Очистка вложенных операторов if-elif с использованием шаблона проектирования стратегии

Сообщение Anonymous »

Проблема: Я создаю простой инструмент обработки данных. В зависимости от формата файла (JSON, XML или CSV) мне нужно применить разную логику синтаксического анализа. В настоящее время я использую длинную цепочку операторов if-elif внутри одного класса. По мере добавления новых форматов этот класс становится сложнее поддерживать, и он нарушает принцип единой ответственности.
Проведенное исследование: я читал о шаблоне стратегии и проектировании на основе интерфейса. Я понимаю, что нужно инкапсулировать каждый алгоритм в отдельный класс, но, будучи новичком, я бьюсь над тем, как динамически выбирать правильную стратегию в Python, не создавая при этом очередного бардака «if-elif» на заводе.
Код

Код: Выделить всё

class DataProcessor:
def process(self, format_type, data):
if format_type == "json":
return f"Parsing JSON: {data}"
elif format_type == "xml":
return f"Parsing XML: {data}"
elif format_type == "csv":
return f"Parsing CSV: {data}"
else:
# This grows every time I add a new format
raise ValueError("Unsupported format")

# Usage
processor = DataProcessor()
print(processor.process("json", "{'key': 'value'}"))
Чего я хочу достичь: Я хочу преобразовать это в чистую архитектуру, где:
  • Каждый синтаксический анализатор представляет собой отдельный класс/стратегию.
  • Процессор данных не нужно изменять при добавлении нового формата.
Что я пробовал: Я пытался создать словарь классов, но не уверен, является ли это «Pythonic» способом реализации шаблона стратегии или существует более стандартный подход с использованием abc (абстрактные базовые классы), чтобы гарантировать, что все стратегии используют один и тот же интерфейс.
Как мне правильно реализовать это, чтобы мой код оставался масштабируемым?

Вернуться в «Python»