Создавать отдельные модули или просто писать все в один файл. Правильность написания или нужен ли рефакторинг

360 просмотра
0
0 Комментариев

Вопрос по сути не сложный. Суть его такова как будет лучше писать код создавать отдельные модули ( файлы с кусками основного кода ) или просто писать все в один файл, но с комментариями. Пример ниже:

  1. file1.py

    import l
    def iii():
      radiobox_choiсe_1_mainsection = l.QRadioButton('Мальчик', l.root)
      radiobox_choiсe_1_mainsection.resize(210, 40)
      radiobox_choiсe_1_mainsection.toggle()
      radiobox_choiсe_1_mainsection.move(90, 90)
      radiobox_choiсe_2_mainsection = l.QRadioButton('Девочка', l.root)
      radiobox_choiсe_2_mainsection.resize(200, 40)
      radiobox_choiсe_2_mainsection.move(90, 120)
      l.root.button_group = l.QButtonGroup()
      l.root.button_group.addButton(radiobox_choiсe_1_mainsection, 1)
      l.root.button_group.addButton(radiobox_choiсe_2_mainsection, 2)
    

  2. file2.py

    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from itertools import groupby
    import sys
    import operation_function
    app = QApplication(sys.argv)
    root = QMainWindow()
    root.setFixedSize(400,400)
    root.setWindowTitle('')
    root.setWindowIcon(QIcon('image/font-main/icon.jpg'))
    operation_function.iii()
    root.show()
    sys.exit(app.exec())
    

  3. main.py

    import l,operation_function
    

    или

  4. main.py

    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from itertools import groupby
    import sys
    import random
    import operation_function
    app = QApplication(sys.argv)
    root = QMainWindow()
    radiobox_choiсe_1_mainsection = QRadioButton('Мальчик', root)
    radiobox_choiсe_1_mainsection.resize(210, 40)
    radiobox_choiсe_1_mainsection.toggle()
    radiobox_choiсe_1_mainsection.move(90, 90)
    radiobox_choiсe_2_mainsection = QRadioButton('Девочка', root)
    radiobox_choiсe_2_mainsection.resize(200, 40)
    radiobox_choiсe_2_mainsection.move(90, 120)
    root.button_group = QButtonGroup()
    root.button_group.addButton(radiobox_choiсe_1_mainsection, 1)
    root.button_group.addButton(radiobox_choiсe_2_mainsection, 2)
    root.setFixedSize(400,400)
    root.setWindowTitle('')
    root.setWindowIcon(QIcon('image/font-main/icon.jpg'))
    root.show()
    sys.exit(app.exec())
    


Добавить комментарий

4 Answers

Python Опубликовано 09.12.2018
0

Один из способов разбиения заключается в поддержке нужной вам концепции. Например, если вы избрали MVC, то вероятнее всего в один модуль (содержащий M) пойдут объекты и отображение модели на базу данных, в другом (V) будут все функции и объекты, связанные с визуализацией а в (C, или в main) будет сама программа, отображающая взаимодействие объектов, суть жизни модели.

В любом случае нужно помнить, что разбиение на модули не может быть «правильным» или «неправильным». Компьютеру все равно как выполнять вашу программу — из одного модуля или собрав из разных файлов.

Разбиение на модули служит для удобства человека, который будет читать или модифицировать код.

Добавить комментарий
0

Код в отдельный модуль обязательно выносится в том случае, если уже происходит (или точно передполагется) вызов этого кода из разных других модулей. Очевидный пример — библиотечные модули.

В «просто большом» проекте удобно разделять по смыслу, чтобы разделить пространство переменных, просто чтобы файлы были умеренного размера.

Добавить комментарий
0

Все зависит от того, что Вы пишите в первую очередь.

Как правило модули и отдельные файлы несут в семе отдельную смысловую нагрузку.

Это классы, либо полностью оттестированные и рабочие куски кода, наборы/заготовку функций, либо смысловые части кода (общение с БД, вычисления, работа с файлами, интерфейс пользователя, …).

Подумайте имеет ли это смысл у Вас и решайте.

Добавить комментарий
0

Не должно возникать вопроса, как разбить неструктуированный блок кода на несколько файлов. Вместо этого допустимый вопрос выглядит как: стоит ли вынести коллекцию функций, классов в отдельный модуль.

То есть прежде чем думать о нескольких файлах, код должен подрасти,
чтобы была польза от разбиения его на отдельные функции, классы.

Полезная функция может иметь и одну строчку и тысячу. Признаки, что код в функцию можно вынести:

  • осмысленное имя функции приходит на ум.

    Если iii() это лучшее имя, которое вы смогли придумать, то не стоит блок кода двигать

  • цель функции легко описать в виде одного короткого предложения
    (первая строчка в docstring).

    Должна быть ясна цель функции и она не должна слишком много делать

  • она используется в нескольких местах.

    Создание функции убирает ненужное дублирование кода.

Это только самые самые наброски: можно книгу написать (и они написаны)
о таких вещах, к примеру, «Совершенный код».

Код в вопросе крошечный (один блок), поэтому проблемы и выгода от
любого стилистического измения будут крошечными.

«Но с комментариями» — это ложное
противопоставление. Если комментарий нужен, его следует добавить вне
зависимости от того в одном модуле код или в нескольких.

В общем случае, удобней плоскими интерфейсами пользоваться (публичная функциональность не требует вложенные модули импортировать явно), при этом реализация может быть по нескольким внутренним модулям раскидана, пример: asyncio.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up