Как правильно реализовать архитектуру 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) от бизнес-логики. Любые примеры или ссылки на проекты, использующие аналогичный технологический стек, будут очень признательны.