Russian Qt Forum
Ноябрь 23, 2024, 06:24
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Вопрос по архитектуре приложения
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вопрос по архитектуре приложения (Прочитано 9659 раз)
FANATIC
Гость
Вопрос по архитектуре приложения
«
:
Июль 28, 2010, 19:35 »
Привет всем! У меня возник такой вопрос.
В университете нас учат тому, чтобы строить модель предметной области через классы. То есть, к примеру, у нас есть аптека, со сложной бизнес-логикой, большим набором бизнес-правил, мы пишем классы "Лекарство", "Поставщик", "Покупка" и т.д. Строим набор неких бизнес правил. Дальше уже эти классы мы отражаем на БД, ну и отдаем их представлению. Все хорошо, все замечательно, мы получаем расширяемое и легко поддерживаемое приложение, но для того, чтобы обеспечить взаимодействие с БД мы должны написать еще некий набор классов, чтобы отдавать наши сущности представлению, мы должны писать еще (к примеру унаследовать от QAbstractItemModel свой класс, или придумывать еще что-то).
С другой стороны мы можем не задумываться о написании сущностей, все реализовывать с помощью уже существующей архитектуры MVC, используя QSqlTableModel, QSqlRelationalTableModel для доступа к БД. Тут все хорошо, бизнес-логику можно реализовывать в виде хранимым процедур, и т.д. Но вот если СУБД их не поддерживает, тогда насколько я понимаю, код может превратиться в "неподдерживаемое нечто".
Какой вариант является более правильным, какой стоит использовать в проектах? Или быть может в чем-то неправ?
Направьте меня на путь истинный:)
Записан
crossly
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #1 :
Июль 28, 2010, 19:38 »
что касается БД.... то все что можно реализовать средствами СУБД нужно реализовывать средствами СУБД...
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Вопрос по архитектуре приложения
«
Ответ #2 :
Июль 28, 2010, 20:14 »
Подход ORM (объектно-реляционное отображение) достаточно современный. И позволяет сделать приложение потенциально переносимым с СУБД на СУБД.
Если же всё завязывать на СУБД, то к ней будет слишком жёсткая привязка. Перенести на другую СУБД будет очень сложно.
А то чему учат, я думаю - правильно. Т.к. создание своих моделей занятие довольно регулярное. А ПО, тупо отображающее таблицы из БД, можно и вовсе не писать, а сунуть заказчику какой-нибудь инструмент с графическим интерфейсом для администрирования БД.
П.С.
Данная тема скорее общая, чем относящаяся к Qt. Т.к. MVC есть не только в Qt.
Записан
Юра.
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Вопрос по архитектуре приложения
«
Ответ #3 :
Июль 28, 2010, 21:46 »
Цитата: FANATIC от Июль 28, 2010, 19:35
То есть, к примеру, у нас есть аптека, со сложной бизнес-логикой, большим набором бизнес-правил, мы пишем классы "Лекарство", "Поставщик", "Покупка" и т.д. Строим набор неких бизнес правил. Дальше уже эти классы мы отражаем на БД, ну и отдаем их представлению.
Ну, если опустить процесс бизнес-моделирования, определения требований, создания модели вариантов использования, аналитической модели, архитектуры, а сразу переходить к модели проектирования...
Цитата: FANATIC от Июль 28, 2010, 19:35
Тут все хорошо, бизнес-логику можно реализовывать в виде хранимым процедур, и т.д. Но вот если СУБД их не поддерживает, тогда насколько я понимаю, код может превратиться в "неподдерживаемое нечто".
Не понял, речь о том, где реализовывать бизнес-логику - на клиенте или в СУБД? На мой взгляд, предпочтительнее - в промежуточном слое, на сервер приложений. Это немного менее эффективно, чем в СУБД, но значительно лучше, чем на клиенте.
Цитата: crossly от Июль 28, 2010, 19:38
что касается БД.... то все что можно реализовать средствами СУБД нужно реализовывать средствами СУБД...
Есть такой подход... Теперь уже можно сказать, был. Лет 15-20 назад это считалось передовым краем, и в среде программистов так и формулировалось - "все, что можно реализовать в хранимых процедурах, надо реализовывать в виде хранимых процедур". То было время тотального господства модели клиент/сервер.
К чему это привело? Система, построенная на этих принципах за 10-15 лет эксплуатации (эксплуатация непременно подразумевает модификацию и развитие) постепенно превращалась в монолитный кусок кода, который не только было трудно масштабировать, но и дорабатывать под новые условия. И появилось уже новое правило - "изменения вносить в проект только в том случае, если изменения не вносить нельзя".
А проекты, которые строились на многозвенной архитектуре, оказались более живучи.
Хотя, конечно, понятно - всему свое время.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Amigo_sa
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #4 :
Июль 29, 2010, 10:18 »
Цитата: sergek от Июль 28, 2010, 21:46
А проекты, которые строились на многозвенной архитектуре, оказались более живучи.
Не могли бы вы уточнить, что такое многозвенная архитектура? Возможно, линком помочь...
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Вопрос по архитектуре приложения
«
Ответ #5 :
Июль 29, 2010, 11:37 »
>>в промежуточном слое, на сервер приложений.
Хотелось бы услышать о реализации такого сервера на С++/Qt. Т.к. в большинстве источников речь идёт о реализации имеющей виртуальную машину (Java, Python)
Записан
Юра.
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Вопрос по архитектуре приложения
«
Ответ #6 :
Июль 29, 2010, 16:50 »
Цитата: lit-uriy от Июль 29, 2010, 11:37
>>в промежуточном слое, на сервер приложений.
Хотелось бы услышать о реализации такого сервера на С++/Qt. Т.к. в большинстве источников речь идёт о реализации имеющей виртуальную машину (Java, Python)
Лет 10 назад сам задавался таким вопросом. Знающие люди советовали free ORB (например,
http://www.cs.wustl.edu/~schmidt/ACE.html
,
http://www.cs.wustl.edu/~schmidt/TAO.html
). Мне не понравилось - слишком тяжеловесно, да и фриварность у них условная, по-моему. Поэтому написал свою библиотеку, обеспечивающую объектное сетевое взаимодействие распределенных приложений:
http://www.freesoft.ru/?id=671951
. Там достаточно полное описание библиотеки с примерами реализации и со всеми исходниками. Работает в виндах и Linux. Может, пригодится.
Недавно доработал ее под Qt, есть примеры. Правда, в 4.6.3 не пробовал ее собирать - жарко очень... Вот жара спадет, поставлю Федору 13 и буду все проверять.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Вопрос по архитектуре приложения
«
Ответ #7 :
Июль 29, 2010, 17:45 »
Цитата: Amigo_sa от Июль 29, 2010, 10:18
Не могли бы вы уточнить, что такое многозвенная архитектура? Возможно, линком помочь...
А интернета у вас нет?
Если вы надо мной не издеваетесь, то, в двух словах, - это системы, в которых клиентские программы соединяются не напрямую с СУБД (как в двухзвенных системах клиент/сервер), а к промежуточному программному слою - серверу приложений (сервер - в смысле не железяка, а программа). Сервер приложений соединен с СУБД, обрабатывает данные, полученные из нее в соответствии с заложенными правилам (часто употребляют термин "бизнес-логика") и отдает клиенту. На клиенте - минимум обработки, как правило, связанный только с отображение результатов запроса. Такие системы лучше масштабируются, меньше зависят от СУБД (поскольку обрабатывающие процедуры вынесены из хранимых процедур в серверную программу).
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Amigo_sa
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #8 :
Июль 29, 2010, 17:59 »
sergek, спасибо большое за разъяснения. Вашими словами намного понятнее, чем успел прочитать.
Никак не могу избавиться от привычки спрашивать незнакомое.
Записан
FANATIC
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #9 :
Июль 29, 2010, 20:29 »
Спасибо за ответы.
В принципе я уже встречался и с многозвенной архитектурой, и с ORM решениями, правда это было в тот момент, когда я осваивал .Net
Мне просто был интересен, так скажем, Qt-подход к построению подобных приложений
И насколько я понимаю, подход с многозвенной архитектурой и ORM, не очень распространен в Qt среде?
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Вопрос по архитектуре приложения
«
Ответ #10 :
Июль 29, 2010, 22:31 »
>>не очень распространен в Qt среде?
он не то чтобы не распространён. В Qt нет штатных средств для ORM. И сторонних тоже нет. Есть тут на форуме упоминание двух проектов, но они вроде ещё сыроваты.
А многозвенка это скорее самостоятельный набор библиотек.
Записан
Юра.
crossly
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #11 :
Июль 30, 2010, 10:28 »
Цитировать
Есть такой подход... Теперь уже можно сказать, был. Лет 15-20 назад это считалось передовым краем, и в среде программистов так и формулировалось - "все, что можно реализовать в хранимых процедурах, надо реализовывать в виде хранимых процедур". То было время тотального господства модели клиент/сервер.
К чему это привело? Система, построенная на этих принципах за 10-15 лет эксплуатации (эксплуатация непременно подразумевает модификацию и развитие) постепенно превращалась в монолитный кусок кода, который не только было трудно масштабировать, но и дорабатывать под новые условия. И появилось уже новое правило - "изменения вносить в проект только в том случае, если изменения не вносить нельзя".
А проекты, которые строились на многозвенной архитектуре, оказались более живучи.
Хотя, конечно, понятно - всему свое время.
это проблемы проектирования ... проблема переносимости это конечно проблема.... НО... во первых глупо платить деньги скажем за Oracle и не использовать всю его мощь... к тому же надо четко понимать архитектуру самой СУБД... и знать, что одни и те же вещи в разных СУБД реализованы по разному.... и по сему ORM и тот же сервер приложений вещь конечно хорошая, НО если вам нужна производительность и максимальная отдача от СУБД, то не поленитесь хорошенько изучить ее архитектуру и потратить время на проектирование.... не знаю как на счет 15-20 лет, но я как ДБА и сейчас придерживаюсь этого мнения... как впрочем и многие админы и разработчики известных СУБД (Oracle, Sybase, MSSQL ...)
Записан
sergek
Гипер активный житель
Offline
Сообщений: 872
Мы должны приносить пользу людям.
Re: Вопрос по архитектуре приложения
«
Ответ #12 :
Июль 30, 2010, 19:40 »
Цитата: crossly от Июль 30, 2010, 10:28
НО если вам нужна производительность и максимальная отдача от СУБД, то не поленитесь хорошенько изучить ее архитектуру и потратить время на проектирование.... не знаю как на счет 15-20 лет, но я как ДБА и сейчас придерживаюсь этого мнения... как впрочем и многие админы и разработчики известных СУБД (Oracle, Sybase, MSSQL ...)
Да кто ж с этим спорит... Особенно, что касается разработчиков СУБД.
Только это не вся правда. Эта правда аналогична сравнению производительности MSSQL и Oracle. Помните, лет 5 назад?
Только производительность СУБД заключена не только в хранимых процедурах, и не столько...
Когда мы начинаем говорить о переносимости и масштабируемости решений, мы уже подразумеваем определенный класс задач. Это не задачи масштаба предприятия и, наверное, даже не регионального уровня. То, о чем я говорю - это наблюдение тенденций, а не теоретические рассуждения. Времена шаманов с бубнами, которые могут на дохлой железяке раскочегарить систему, проходят...
А жаль!
«
Последнее редактирование: Июль 31, 2010, 22:23 от sergek
»
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
crossly
Гость
Re: Вопрос по архитектуре приложения
«
Ответ #13 :
Июль 30, 2010, 22:28 »
я вообще то говорю не только о хранимых процедурах.... о говорю об элементарном sql.... к примеру разберитесь со значение null в oracle и mssql... и вы будите удивлена... элементарный запрос может стать не переносимым.. вернее переносимым, но результат такого переноса вас удивит... и заставит провести немного времени в раздумии "А что же не так??"
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...