Я провожу рефакторинг программы MVC на Python, чтобы разделить задачи каждого уровня. Представление, которое я пытаюсь реорганизовать, большое (>1500 строк), поэтому, чтобы лучше проиллюстрировать то, что я пытаюсь сделать, я буду использовать метод _on_audio_source_change в качестве образца:
class Controller:
def __init__(self, transcription, view):
self.view = view
self.transcription = transcription # model
self._add_callbacks()
self.view.bind_commands()
def _add_callbacks(self):
callbacks = {
CallbacksMain.CHANGE_TRANSCRIPTION_LANGUAGE: self._change_audio_source,
}
for key, method in callbacks.items():
self.view.add_callback(key, method)
def _change_audio_source(self):
# The following code was previously in the `_on_audio_source_change` method of the view
audio_source = AudioSource(audio_source_str)
self.transcription.audio_source = audio_source
self.view.display_input_path("")
self._on_config_change(
section=ConfigTranscription.Key.SECTION,
key=ConfigTranscription.Key.AUDIO_SOURCE,
new_value=audio_source,
)
# How do I handle the rest of the view logic (`_on_audio_source_change`)?
Я думал о многих различных подходах к рефакторингу метода _on_audio_source_change, но ни один из них меня не убедил. Может ли кто-нибудь подсказать, какой способ решения этой проблемы будет наиболее подходящим?
Я провожу рефакторинг программы MVC на Python, чтобы разделить задачи каждого уровня. Представление, которое я пытаюсь реорганизовать, большое (>1500 строк), поэтому, чтобы лучше проиллюстрировать то, что я пытаюсь сделать, я буду использовать метод _on_audio_source_change в качестве образца: [code]class View(TkFrame): def __init__(self): ... self.omn_audio_source = ctk.CTkOptionMenu( master=self.frm_shared_options, values=[e.value for e in AudioSource], ) self.omn_audio_source.grid(row=3, column=0, padx=20, pady=0, sticky=ctk.EW)
def _on_audio_source_change(self, option): if option != AudioSource.MIC: self._toggle_input_path_fields(should_show=True) self.frm_main_entry.grid()
if option != AudioSource.DIRECTORY: self.chk_autosave.configure(state=ctk.NORMAL) self.btn_save.configure(state=ctk.NORMAL)
if option in [AudioSource.FILE, AudioSource.DIRECTORY]: self.btn_main_action.configure(text="Generate transcription") self.lbl_input_path.configure(text="Input path") self.btn_input_path_file_explorer.grid()
if self._audio_source == AudioSource.DIRECTORY: self.chk_autosave.select() self._on_autosave_change() self.chk_autosave.configure(state=ctk.DISABLED) self.btn_save.configure(state=ctk.DISABLED)
for key, method in callbacks.items(): self.view.add_callback(key, method)
def _change_audio_source(self): # The following code was previously in the `_on_audio_source_change` method of the view audio_source = AudioSource(audio_source_str) self.transcription.audio_source = audio_source
# How do I handle the rest of the view logic (`_on_audio_source_change`)? [/code] Я думал о многих различных подходах к рефакторингу метода _on_audio_source_change, но ни один из них меня не убедил. Может ли кто-нибудь подсказать, какой способ решения этой проблемы будет наиболее подходящим?
Общая информация
Я пишу код в Unity на C#8.0.
Я создаю игру, в которой игрок сражается с врагами, играя в карты. которые имеют разные эффекты (например, Slay the Spire). Игрок выбирает карту, затем выбирает цель карты, а затем (если цель...
Общая информация
Я пишу код в Unity на C#8.0.
Я создаю игру, в которой игрок сражается с врагами, играя в карты. которые имеют разные эффекты (например, Slay the Spire). Игрок выбирает карту, затем выбирает цель карты, а затем (если цель...
В настоящее время я пытаюсь протестировать большой текст с помощью модели OPENAI gpt-4. Я пытаюсь реорганизовать приведенный ниже код, чтобы модель могла генерировать последовательный, читаемый и плавный документ. Код ниже возвращает 5000 слов, к...
Потратив несколько часов на исследование, я изо всех сил пытаюсь написать код, соответствующий принципам SOLID.
Мне нужно создать приложение для взаимодействия с API OpenMetadata (в частности, для загрузить данные YAML). Однако я столкнулся с...