Найти - Пользователи
Полная версия: PyQt4. Каков принцип создания программы рабтающей с БД?
Начало » Базы данных » PyQt4. Каков принцип создания программы рабтающей с БД?
1
Pluto
Создали вы БД в какой-нибудь СУБД.

Как вы реализуете код для ввода данных в поля базы данных?
Допустим, разместили контролы-виджеты на форме. Затем делается SQL-запрос, данные из него загружаются куда? В словарь? А затем присваивать каждому виджету значение из соответствующего поля словаря? Потом, при нажатии пользователем на какую-нибудь кнопочку “сохранить”, сделать проверку введённых в виджетах данных и формировать SQL-запрос на обновление БД, подставляя в него данные из виджетов?
Soteric
В MVC/MVP у вас будет разделение на Модель (класс или набор классов, всякие там User, PriceList и т.д.), которая отражает состояние базы, и Вид (классы PyQT, окна и элементы гуи, всякие текстбоксы, чекбоксы и т.д.), который отражает состояние Модели.

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

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

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

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

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

Ссылки на Фаулера и эту статью возможно будут полезными.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB