Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2012 05:25:23

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  2  -
Профиль   Отправить e-mail  

PyQt4. Каков принцип создания программы рабтающей с БД?

Создали вы БД в какой-нибудь СУБД.

Как вы реализуете код для ввода данных в поля базы данных?
Допустим, разместили контролы-виджеты на форме. Затем делается SQL-запрос, данные из него загружаются куда? В словарь? А затем присваивать каждому виджету значение из соответствующего поля словаря? Потом, при нажатии пользователем на какую-нибудь кнопочку “сохранить”, сделать проверку введённых в виджетах данных и формировать SQL-запрос на обновление БД, подставляя в него данные из виджетов?

Офлайн

#2 Окт. 31, 2012 09:56:44

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

PyQt4. Каков принцип создания программы рабтающей с БД?

В MVC/MVP у вас будет разделение на Модель (класс или набор классов, всякие там User, PriceList и т.д.), которая отражает состояние базы, и Вид (классы PyQT, окна и элементы гуи, всякие текстбоксы, чекбоксы и т.д.), который отражает состояние Модели.

При инициализации приложения Модель делает SQL запрос к базе и выстраивает свое состояние. То есть запоминает полученные данные в полях, создает при необходимости дополнительные объекты и т.д.

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

Когда пользователь нажал “сохранить”, то Вид проверяет валидность введенных данных и обновляет Модель. Модель при обновлении делает SQL Update, сохраняя свое состояние в базу.

Если в Модели происходят изменения, то она уведомляет своих подписчиков о них. Это уведомление получает подписанный Вид и соответствующим образом обновляет состояние виджетов.

В MVC/MVP есть соответственно Контроллер/Представитель, который стоит между Моделью и Видом и отвечает за валидацию данных, за реакцию на нажатие кнопок и т.д. Их роль может варьироваться и остается за разработчиком. Например “пассивный” Вид вообще ничего не проверяет и умеет только менять состояние виджетов и транслировать наверх события типа нажатия кнопок (то есть Контроллеру или Представителю, которые уже общаются с Моделью). Активный Вид более “умный”, он может и сам как-то реагировать на события.

Ссылки на Фаулера и эту статью возможно будут полезными.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version