Необходимо провести рефакторинг кода: метод экземпляра выполняет слишком много действий.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Необходимо провести рефакторинг кода: метод экземпляра выполняет слишком много действий.

Сообщение Anonymous »

В настоящее время я работаю над уже существующей средой автоматизированного тестирования, в которой мы тестируем сервис, работающий в Kubernetes. По сути, он предоставляет функции резервного копирования/восстановления для приложений k8s.
Запросы на резервное копирование/реплицирование/восстановление отправляются пользователями через спецификации, включая политики, которые периодически выполняют запросы моментального копирования/реплицирования.
На широком уровне мы можем выполнить 4–5 операций сравнения (например, привязку/реплицирование и восстановление приложения) с различными вариантами в зависимости от представленной спецификации различий. В настоящее время у меня есть метод, опубликованный ниже, где операция принимает кучу параметров, подобных кваргам, и кучу условий if для выполнения запрошенной операции.
Нам также необходимо проверить эти операции. на бэкэнде, и вид проверки зависит от последовательности и параметров операций, выполненных до проверки.
https://pastebin.com/50t1SH9X
пример аргументов здесь

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

application_name = kwargs.pop("application_name")
skip_checks = kwargs.pop("skip_checks", list())
self.skip_checks = skip_checks
start_application = kwargs.pop("start_application", True)
start_auxiliary_resources = kwargs.pop("start_auxiliary_resources", False)
start_pending_volumes = kwargs.pop("start_pending_volumes", False)
start_pending_services = kwargs.pop("start_pending_services", False)
remove_application = kwargs.get("remove_application", True)
is_stateless = kwargs.get("is_stateless", False)
snapshot_count = kwargs.get("snapshot_count", 1)
restore_cycles = kwargs.pop("restore_cycles", 0)
retry_interval = kwargs.get("retry_interval", 60)
is_restore_random = kwargs.get("is_restore_random", False)
restore_attempt = kwargs.get("restore_attempt", 1)
is_restore_validated = kwargs.get("is_restore_validated", True)
remove_snapshot = kwargs.get("remove_snapshot", True)
remove_restore_request = kwargs.get("remove_restore_request", True)
kubernetes_services = list()
modify_kubernetes_service = kwargs.pop("modify_kubernetes_service", False)
suspend_service = kwargs.get("suspend_service", False)
resume_service = kwargs.get("resume_service", False)
create_snapshot = kwargs.get("create_snapshot", False)
.
.
.
if cloud_version:
CloudApiFactory.set_config(name="cloud_version", value=cloud_version)
cloud_version = CloudApiFactory.get_config(name="cloud_version")
remove_resources = kwargs.pop("remove_resources", None)
validate_configurations = kwargs.pop("validate_configurations", dict())
cloud_cluster = kwargs.get("cluster", None)

INFO("Setting the default skip restore if not set")
self.cloud_workflow.set_default_skip_restoring_existing_resources(base=self.base_resources)

if start_application:
kubernetes_services = self.cloud_workflow.deploy_kubernetes_application(application_name=application_name,
cloud_version=cloud_version,
skip_checks=skip_checks,
**kwargs)
if kwargs.get("cross_ns_restore", False):
INFO("Cross ns restore WF")
self.cross_ns_restore(**kwargs)

if create_multiple_configs:

Мне нужны предложения и, возможно, шаблоны проектирования или любые онлайн-ссылки по рефакторингу таких классов и функций.
На мой взгляд, я подумываю об использовании спецификаций /configs как класс данных и использовать его для обработки. Однако мне все еще нужно выполнять операции, основанные на diff-части спецификаций, и это включает в себя множество условий if.
Более того, проверка также довольно сложна с аналогичными условиями if (проверка - это отдельный класс)

Подробнее здесь: https://stackoverflow.com/questions/792 ... any-things
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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