crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Реализация многопользовательского приложения
LE0N
  опции профиля:
сообщение 13.3.2009, 20:59
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


В общем весьма специфический такой вопросец...
В общем вот у меня имеется таблица users.
К этой таблице прикручены ещё таблицы, товары и прочая дребедень.
Реализован ли в QT шаблон ActiveRecord ?
Как лучше всего организовать логику работы с базой данных ?
Вот допустим у меня идёт выборка всех пользователей и в md5 их паролей.
После этого нужно всех пользователей вбить в комбо-бокс....
"Авторизовываем" оного. И нужно будет передать авторизованного пользователя в мэйн форму....
Не знаю, понятно ли я объяснил, если будут вопросы - с удовольствием отвечу...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.3.2009, 21:09
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(LE0N @ 13.3.2009, 23:59) *
QT шаблон ActiveRecord ?
а что это такое?

Цитата(LE0N @ 13.3.2009, 23:59) *
Не знаю, понятно ли я объяснил, если будут вопросы - с удовольствием отвечу.
т.е. посути вопрос о построении ПО с авторизацией пользователя?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 13.3.2009, 21:26
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
а что это такое?

http://en.wikipedia.org/wiki/Active_record_pattern
Вот немножко инфы из википедии, но это мелочи. Там ещё можно свои зависимости создавать и прочие навороты. Короче обстракция над слоем базы данных. Очень сильно распространена в вебе. (Я оттуда пришёл :))
Остольную инфу можно без проблем получить в гугле....
Цитата
т.е. посути вопрос о построении ПО с авторизацией пользователя?

Не совсем. Вопрос, скорее всего, абстрактный. Авторизация пользователя - это как пример, реализация которого (авторизация на одной форме, работа оного на второй) будет мне примером. Сегодня пол дня пытаюсь написать прозрачный, читабельный и удобно-рефактурируемый (о как залепил +)) код.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 13.3.2009, 22:38
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


тогда посмотри темы:
Требуется совет по поводу архитектуры..
Шаблон проектирования Singleton (одиночка) (там обсуждалось и про пользователей)
и может быть
Система сбора и обработки данных

Если какая-то из тем окажатся, вдруг подходящей, соеденю эту тему с ней, но вовсяком случае я думаю ее нужно переносить из Qt, и менять название.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 13.3.2009, 22:55
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
я думаю ее нужно переносить из Qt

Нет. Это косается именно QT на обычном СИшном АПИ или в вебе, на PHP , я бы особо не циклился (тем более там у меня собственный фреймворк написанный). Меня интересует именно как с меньшими трудозатратами осуществить данное действие в QT....
Пока что только коннектится и выполнять запросы умею... А остольное - для меня тёмный лес. Смотрел примеры вроде SQLбраузер, но даже с опытом разборки чужого кода, так и не въехал что к чему. Да и пример там немножко не из той степи....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.3.2009, 23:18
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(LE0N @ 13.3.2009, 22:55) *
Цитата
я думаю ее нужно переносить из Qt

Нет. Это косается именно QT на обычном СИшном АПИ или в вебе, на PHP , я бы особо не циклился (тем более там у меня собственный фреймворк написанный). Меня интересует именно как с меньшими трудозатратами осуществить данное действие в QT....
Пока что только коннектится и выполнять запросы умею... А остольное - для меня тёмный лес. Смотрел примеры вроде SQLбраузер, но даже с опытом разборки чужого кода, так и не въехал что к чему. Да и пример там немножко не из той степи....

Я правильно понял, что ты хочешь, всю работу с БД скрыть за классами?
Я почитал по поводу Active record, такого готового решения нет, все нужно делать руками.
Ты подробней объясни.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 14.3.2009, 0:45
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Я правильно понял, что ты хочешь, всю работу с БД скрыть за классами?
Я почитал по поводу Active record, такого готового решения нет, все нужно делать руками.
Ты подробней объясни.

В идеале - да.
Не в идеале - вот, допустим, мы имеем таблицу пользователей.
Получаем их.
В первый раз мы получили поля username,password во второй раз id,username,password.
Тип переменной один и тот же (QSqlQuery) а данные в нём разные...Передавать в конструктор только ТО, что нужно, увеличивая число аргументов функции?
Если загонять данные через конструктор, то мы заберём оттуда только то, что требуется. А вдруг нам потребуется потом ещё и id ? Переписывать первый запрос?
Или, может быть, забирать все данные ? Только нахера забирать тот же blob или bigtext, если они не используются в данном месте....
Короче я не знаю с какой стороны подступиться...В вебе и с скриптами все дела выглядели на много проще...
Имеем лоадер. Который подгружает конфиги, коннектится к базе, получает (делает запрос) пользователей...
Потом мне нужно передать управление диалогу - в диалоге имеем список пользователей и их пароли.
После сверки md5 этих паролей, мне требуется передать управление, опять же, лоадеру, в который должен попасть активный пользователь...
Вот как такую хрень организовать ? Добавлять ещё переменные типа *activeUser в форму авторизации оного? И по закрытию этого окна получать его лоадером?
И что дальше? получили логин. Ещё один запрос делать для получения дополнительных данных ? Воспитан в лучших традициях и знаю, что это лишняя нагрузка.
В общем хочу подойти к этому делу основательно....
Как вы считаете, моразм?

Сообщение отредактировал LE0N - 14.3.2009, 0:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.3.2009, 9:51
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


LE0N, по твоему описанию нет ничего связанного с Qt, давай лучше обсудим структуру программы, а потом уже детали реализации на Qt, и не в одной теме.

Цитата(LE0N @ 14.3.2009, 3:45) *
В первый раз мы получили поля username,password во второй раз id,username,password.
вот это я не понял, что значит "в первый раз" и "во второй раз"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 14.3.2009, 11:57
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(LE0N @ 14.3.2009, 0:45) *
Не в идеале - вот, допустим, мы имеем таблицу пользователей.
Получаем их.
В первый раз мы получили поля username,password во второй раз id,username,password.
Тип переменной один и тот же (QSqlQuery) а данные в нём разные...Передавать в конструктор только ТО, что нужно, увеличивая число аргументов функции?
Если загонять данные через конструктор, то мы заберём оттуда только то, что требуется. А вдруг нам потребуется потом ещё и id ? Переписывать первый запрос?
Или, может быть, забирать все данные ? Только нахера забирать тот же blob или bigtext, если они не используются в данном месте....
Короче я не знаю с какой стороны подступиться...В вебе и с скриптами все дела выглядели на много проще...

Я эксперементировал с оборачиванием объектов БД в классы. Посмотрим твой пример с пользователеями...
Это можно реализовать двумя способами:
1. Делается класс User, в котором есть переменные для всех полей записи.
Конструктор без параметров создает новый объект в памяти (в БД пока ничего не создается);
Конструктор с параметром id читает в свои внутреннии переменные все поля из записи с указанным id;
Есть геттеры/сеттеры для переменных;
Есть метод flush, который в зависимости от конструктора или создает новую запись, или обновляет ее.
Выводы: даже если тебе нужно одно поле из записи закеширует все.
2. Делаем класс User, который хранит только id.
Конструктор без параметров создает новый объект в памяти и новую пустую запись в БД. Сохраняет id новой записи в себе;
Конструктор с параметром id сохраняет этот id в себе;
Геттеры на кождое поле выполняют запрос к БД и возвращают значение, сеттеры делаю запросом с сохранением данных в БД.
Выводы: если тебе нужно прочитать три поля из записи, будет вызвано три запроса.

В принципе первый вариант мне нравиться больше чем второй, но я отказался от обоих. Мне стало лениво описывать каждую запись в свой класс. Причем по хорошему для каждой таблице нужно описать еще класс типа UserTable, в котором описать работу с самой таблицей...
В приложении мы постоянно имеет дело с самими таблицами, поэтому я остановился на создании своих моделей и работы через них, т.е. в UserModel можно добавить свои методы:
QSqlRecord record( id );
int add( name, password );
int edit( id, name, password );
bool canDelete( id );
int del( id );

Методы add, edit, del - возвращают номер строки, которую нужно сделать активной в view.

Цитата(LE0N @ 14.3.2009, 0:45) *
Имеем лоадер. Который подгружает конфиги, коннектится к базе, получает (делает запрос) пользователей...
Потом мне нужно передать управление диалогу - в диалоге имеем список пользователей и их пароли.
После сверки md5 этих паролей, мне требуется передать управление, опять же, лоадеру, в который должен попасть активный пользователь...
Вот как такую хрень организовать ? Добавлять ещё переменные типа *activeUser в форму авторизации оного? И по закрытию этого окна получать его лоадером?
И что дальше? получили логин. Ещё один запрос делать для получения дополнительных данных ? Воспитан в лучших традициях и знаю, что это лишняя нагрузка.
В общем хочу подойти к этому делу основательно....
Как вы считаете, моразм?

А здесь, мне так кажется, ты зациклился на лоадере. ;)
Есть программы, которая работает с определенной конфигурацией. Вводим класс Configuration, который содержит всю информацию для работы. После конструирования MainWindow, запускается диалог выбора пользователя, после выбора пользователя создается и настраивается объект конфигурации и MainWindow начинает работать с этой конфигурацией. Пользователь нажал кнопку закончить работу, объект конфигурации разрушился и открылся диалог выбора пользователя. И т.д.

Сообщение отредактировал BRE - 14.3.2009, 11:59
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 15.3.2009, 20:21
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
В приложении мы постоянно имеет дело с самими таблицами, поэтому я остановился на создании своих моделей и работы через них, т.е. в UserModel можно добавить свои методы

А от чего наследовать UserModel в случае с работой с базами данных? (QT)
Цитата
А здесь, мне так кажется, ты зациклился на лоадере

Возможно. Просто его я уже реализовал. Вот только передачу указателей на данные из лоадера в приложение не могу придумать как реализовать...

Сообщение отредактировал LE0N - 15.3.2009, 21:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 19:53