Как правильно реализовать архитектуру MVC в приложении PySide6/QML и Django?

Я разрабатываю настольное приложение с использованием PySide6/QML для фронтенда и Django (с использованием Channels для чата в реальном времени) для бэкенда. Я стремлюсь придерживаться архитектуры Model-View-Controller (MVC), но не уверен, как правильно интегрировать MVC с выбранными технологиями.

На данный момент я создал интерфейс для входа в систему и простое приложение для чата в реальном времени с использованием WebSockets, все в рамках QML и встроенных функций JavaScript. Python использовался редко, в основном для задач, которые я не мог решить в QML/JS (например, доступ к буферу обмена и кодирование base64 для работы с изображениями). У меня есть большое рабочее приложение, но у меня есть только один файл python, я думаю, это плохая привычка

class Window(QObject):
    def __init__(self) -> None:
        super().__init__()

        
    @Slot(result=str)
    def getPaste(self):
        cb = QClipboard(self)
        return cb.text()
    
    @Slot(str,result=str)    
    def encodeImage(self,path):
        with open(path, 'rb') as image_file:
            base64_bytes = base64.b64encode(image_file.read())
        return base64_bytes.decode()



if __name__ == "__main__":
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    window = Window()
    engine.rootContext().setContextProperty('window',window)
    qml_file = Path(__file__).resolve().parent / "main.qml"
    engine.load(qml_file)
    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec())

Вот краткий обзор моих текущих настроек:

Фронтенд (QML/JS):

Вебсокетная связь с сервером Django с помощью WebSocket { id: chatSocket }. Отправка данных с помощью chatSocket.sendTextMessage(JSON.stringify()). Обработка входящих сообщений с помощью onTextMessageReceived: {} в QML. Многократно используемые компоненты и страницы выделяются в отдельные QML-файлы. Ресурсы, такие как изображения и шрифты, управляются в отдельных файлах.

Бэкенд (Django):

Пока нет интеграции с фронтендом, за исключением чата WebSocket.

Структура проекта:

В настоящее время проект состоит из одного единственного файла Python и нескольких файлов QML. Я ищу совета, как структурировать мое приложение в соответствии с паттерном MVC с помощью этих технологий. В частности, мне нужен совет по следующим вопросам:

Как определять модели и взаимодействовать с ними в PySide6/QML-приложении. Лучшие практики настройки контроллеров в этом контексте. Как обеспечить правильное отделение представлений (QML) от бизнес-логики. Любые примеры или ссылки на проекты, использующие аналогичный технологический стек, будут очень признательны.

Вернуться на верх