ООП и GUI: что и где реализовать?

Около шести месяцев назад я надел на работу шляпу разработчика полного стека и начал работать над инструментом, состоящим из графического интерфейса и базы данных. Клиент запросил, чтобы инструмент был написан на Python, поэтому я работал с лицензией компании PyQt для создания интерфейса.

Это первый инструмент такого рода, который я когда-либо создавал, и он работает довольно хорошо, но вопрос, который не дает мне покоя, когда я создаю подклассы различных элементов графического интерфейса PyQt: «Где мне это реализовать?»

Например, одна из функций инструмента включает в себя предоставление пользователю формы для заполнения (которая является подклассом элемента графического интерфейса), а затем отправку заполненной формы для сохранения в одной из таблиц базы данных — довольно стандартные вещи. Пользователь заполняет форму, и после нажатия кнопки «Отправить» поля формы проверяются, чтобы убедиться, что они соответствуют определенным ограничениям, а затем в базе данных вызывается хранимая процедура для отправки данных формы. Давайте вызовем эту функцию submit().

Очевидно, что существует множество способов структурировать код, но 3 основных, с которыми я играл, это:

  1. Реализуйте submit() непосредственно в теле класса формы как один из ее методов.
  2. Создавайте функции вне класса и вызывайте их из самого класса.
  3. Создайте класс «обработчик», который получает поля формы в сигнале, испускаемом при нажатии кнопки «отправить».

Мой вопрос таков: какой из них, если таковой имеется, является «лучшим» способом сделать это? Когда я говорю «лучший», я имею в виду то, что является наиболее «оОП-подобным» с точки зрения принятых соглашений, а также то, какое из них будет легче читать и поддерживать программисту, который придет после меня.

Заранее спасибо :)

В PHP
В PHP
В большой кодовой базе с множеством различных компонентов классы, функции и константы могут иметь одинаковые имена. Это может привести к путанице и...
Принцип подстановки Лискова
Принцип подстановки Лискова
Принцип подстановки Лискова (LSP) - это принцип объектно-ориентированного программирования, который гласит, что объекты суперкласса должны иметь...
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме