Около шести месяцев назад я надел на работу шляпу разработчика полного стека и начал работать над инструментом, состоящим из графического интерфейса и базы данных. Клиент запросил, чтобы инструмент был написан на Python, поэтому я работал с лицензией компании PyQt для создания интерфейса.
Это первый инструмент такого рода, который я когда-либо создавал, и он работает довольно хорошо, но вопрос, который не дает мне покоя, когда я создаю подклассы различных элементов графического интерфейса PyQt: «Где мне это реализовать?»
Например, одна из функций инструмента включает в себя предоставление пользователю формы для заполнения (которая является подклассом элемента графического интерфейса), а затем отправку заполненной формы для сохранения в одной из таблиц базы данных — довольно стандартные вещи. Пользователь заполняет форму, и после нажатия кнопки «Отправить» поля формы проверяются, чтобы убедиться, что они соответствуют определенным ограничениям, а затем в базе данных вызывается хранимая процедура для отправки данных формы. Давайте вызовем эту функцию submit().
Очевидно, что существует множество способов структурировать код, но 3 основных, с которыми я играл, это:
Мой вопрос таков: какой из них, если таковой имеется, является «лучшим» способом сделать это? Когда я говорю «лучший», я имею в виду то, что является наиболее «оОП-подобным» с точки зрения принятых соглашений, а также то, какое из них будет легче читать и поддерживать программисту, который придет после меня.
Заранее спасибо :)


Думайте о различных частях вашего приложения как о системах, каждая из которых несет свою ответственность. Например, система пользовательского интерфейса, система базы данных и промежуточные системы, реализующие бизнес-правила. В каждой системе используйте разные версии ваших бизнес-объектов, которые соответствуют абстракции системы; например, форма ввода пользователя в системе пользовательского интерфейса, пользовательская таблица в системе базы данных, модель пользователя в бизнес-системе.
Затем, в соответствии с вашим вариантом 3, установите связь между различными системами с помощью сообщений и сигналов. Вам нужно будет выбрать какой-то протокол для передачи полезной нагрузки данных, чтобы вы не пропускали абстракцию между системами. Объекты передачи данных — хороший способ сделать это, но вы также можете отправлять байты или текстовое представление, такое как JSON.