powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интересует ваше мнение о двух разных подходах
25 сообщений из 42, страница 1 из 2
Интересует ваше мнение о двух разных подходах
    #39792993
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Интересует ваше мнение о двух разных подходах. Сейчас одной ногой сижу на поддержке двух разных проектов (Delphi+firebird) для конторы (написаны не мной и писались двумя разными людьми), время от времени у бизнеса возникают хотелки которые я реализовываю.
В одном проекте компоненты для работы с базой "накиданы" дизайнере.
В другом проекте (использются классы, методы итд.) компоненты для работы с базой создаються динамиччески.
При запросе в базу, метод создает транзакцию кверю и отдает данные, после компоненты удаляются.
И в некоторых местах где например в интерфейсе есть набор фильтров и баттон "Применить" (по которому дергается какойто из методов) пользователь может выбирать разные фыльтры и сколько угодно раз жмякать "Применить" есть проверка, если компонент уже создан то он уничтожается и все пересоздается, и все поехало по новой.
Интересует мнение насколько этот подход оправдан.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793006
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

Во втором подходе, похоже, была попытка отделить логику от интерфейса. Это хорошо и так и надо. Т.к. интерфейсы могут быть разными.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793051
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы ради интереса поставил логирование. Сколько раз пользователь(ли) меняет набор фильтров. Может те, кто это умел уже ушли, а новые не в зуб ногой и функция устарела
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793055
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaИнтересует мнение насколько этот подход оправдан.
Скажем так, он оправдан, когда программисту нехрен делать, всё слишком хорошо и безошибочно работает и сложно чувствовать себя крутым.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793098
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторИ в некоторых местах где например в интерфейсе есть набор фильтров и баттон "Применить" (по которому дергается какойто из методов) пользователь может выбирать разные фыльтры и сколько угодно раз жмякать "Применить" есть проверка, если компонент уже создан то он уничтожается и все пересоздается, и все поехало по новой.
Считаю, что подход плохой.
1. Трата времени и ресурсов на пересоздание.
2. Если переоткрываются транзакции - дополнительно увеличивается их счетчик идентификаторов, что при большом количестве транзакций может со временем создать проблемы.
Плюс (и то не всегда) только в том, что проще перейти на другую технологию работы с БД - меньше кода переписывать.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793104
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезныйменьше кода переписывать.
Экстремально странное утверждение. Максимум, чего можно достичь - "не слишком больше кода переписывать", и то только в тех проектах, в которых код хорошо написан (чего на практике при таком подходе никогда не бывает).
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793114
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМаксимум, чего можно достичь - "не слишком больше кода переписывать", и то только в тех проектах, в которых код хорошо написан (чего на практике при таком подходе никогда не бывает).
Если при нажатии кнопки дергается метод, реализация которого физически находится в другом модуле - переписывать нужно только код этого другого модуля. Во всяком случае, это проще, нежели чем рисковать портить еще и интерфейс.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793121
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, что-то я туплю. Конечно, отрыв кода интерфейса от логики и пересоздание компонентов - совершенно разные вещи. Выделение логики отдельно от интерфейса - необходимость для проектов, которым нужно развиваться. Пересоздание компонентов с реинициализацией всего и вся - на мой взгляд, плохой подход.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793125
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезныйпереписывать нужно только код этого другого модуля.
От этого переписываемого кода не становится меньше.

ЛюбезныйВо всяком случае, это проще, нежели чем рисковать портить еще и интерфейс.
Новое странное утверждение про "ещё и". При этом Вы вообще позабыли про рассмотрение в разрезе "дизайненные vs создаваемые на ходу компоненты" и почему-то перешли к рассмотрению совершенно перпендикулярного разреза "один файл или разные". Такое ощущение, что Вы почему-то считаете, что "дизайненные" - это "один файл", а "создаваемые на ходу" - это разные, хотя с вероятностью в 50% будет строго наоборот.

Ну а в целом - накидывать хренову уйму ненужного тупого кода это да, проще. Поэтому многие так и делают. Вот только "проще" - не значит "лучше".
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793250
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,
ваш вопрос из серии религиозных - каждый будет защищать свой любимый подход.

Вам в некотором смысле повезло - вы занимаетесь поддержкой и того, и другого. Через некоторое время вы сами сможете ответить на вопрос "какой из подходов лучше с точки зрения поддержки?"
(При первоначальной разработке (касательно её простоты и скорости) ответ может оказаться другим, но обычно считают, что удобство поддержки важнее, т.к. обычно в конечном счете на неё уходит больше ресурсов.)

С точки зрения автоматизированного тестирования, например, второй подход лучше, хотя и он недостаточен: бизнес-логика должна быть отделена как от интерфейса, так и от логики хранения данных. (Но кого это волнует, если тестирование ручное или вообще его делает заказчик/пользователь?)
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793257
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1GС точки зрения автоматизированного тестирования, например, второй подход лучше, хотя и он недостаточен: бизнес-логика должна быть отделена как от интерфейса, так и от логики хранения данных.
В этих словах Вы ухитрились допустить сразу две ошибки. Во-первых, как уже обсудили выше, отделение бизнес-логики либо чего-то другого никак не зависит от сравниваемых подходов и равно может присутствовать либо отсутствовать в любом из них. Во-вторых же, у Вас ложные представления об автоматизированном тестировании. Судя по тому, что Вы сказали, Вы имели в виду юнит-тестирование. Однако, юнит-тестирование приложений работы с БД нерационально, в то время как автоматизированное тестирование куда шире, применимо для подобных приложений и равно способно тестировать как "отделённые", так и "совмещённые" приложения.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793269
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любезныйотрыв кода интерфейса от логики и пересоздание компонентов - совершенно разные вещи.
Выделение логики отдельно от интерфейса - необходимость для проектов, которым нужно
развиваться. Пересоздание компонентов с реинициализацией всего и вся - на мой взгляд,
плохой подход.

Поэтому уже лет 20 как придумали TDataModule, которые сочетают инкапсуляцию методов
доступа к базе и "накидывание компонентов мышкой".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793310
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerL1GС точки зрения автоматизированного тестирования, например, второй подход лучше, хотя и он недостаточен: бизнес-логика должна быть отделена как от интерфейса, так и от логики хранения данных.
В этих словах Вы ухитрились допустить сразу две ошибки. Во-первых, как уже обсудили выше, отделение бизнес-логики либо чего-то другого никак не зависит от сравниваемых подходов и равно может присутствовать либо отсутствовать в любом из них. Во-вторых же, у Вас ложные представления об автоматизированном тестировании. Судя по тому, что Вы сказали, Вы имели в виду юнит-тестирование. Однако, юнит-тестирование приложений работы с БД нерационально, в то время как автоматизированное тестирование куда шире, применимо для подобных приложений и равно способно тестировать как "отделённые", так и "совмещённые" приложения.

"Во-вторых", я имел в виду вовсе не юнит-тестирование, а тестирование более крупных функциональных блоков (хотя не уверен, можно ли его считать интеграционным). Конкретнее - такое, при котором для скорости реальную СУБД приходится подменять тестовым хранилищем данных в ОЗУ.

Насчет "во-первых" - действительно, автор говорил только про использование визуального дизайнера для БД-компонент. То, что при этом использовались еще и db-aware controls с заданной в их свойствах привязкой к БД-компонентам - это уже моё предположение. Верное или нет - пока неизвестно.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793316
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L1G"Во-вторых", я имел в виду вовсе не юнит-тестирование, а тестирование более крупных функциональных блоков (хотя не уверен, можно ли его считать интеграционным).
Для тестирования "более крупных функциональных блоков" разделение некритично. Там, где тестируется блок - он может состоять из нескольких функций в разных файлах, он может состоять из нескольких функций в одном файле, он может состоять из одного ужасного обработчика Button1Click - код тестирования и не заметит разницы, он в любом случае "просто что-то вызывает".

L1GКонкретнее - такое, при котором для скорости реальную СУБД приходится подменять тестовым хранилищем данных в ОЗУ.
Кошмар. Скажу деликатно: ценность такого тестирования нулевая. Точнее - отрицательная, поскольку на него тратятся вполне конкретные время и деньги.

L1GНасчет "во-первых" - действительно, автор говорил только про использование визуального дизайнера для БД-компонент. То, что при этом использовались еще и db-aware controls с заданной в их свойствах привязкой к БД-компонентам - это уже моё предположение. Верное или нет - пока неизвестно.
Независимо от того, верно оно или нет, это не имеет никакого отношения к возможности автоматизированного тестирования. Используются dbaware - значит, авторы проекта ещё более недураки, вот и всё.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793326
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaПри запросе в базу, метод создает транзакцию кверю

весь вопрос - как создаёт.
если в каждом классе по разному - то ой.

а если там создание в одном месте (например в общем классе-предке, типа Active Record), то при изменении, например, библиотеки доступа к БД - потребуется только это место переписать (я говорю именно про создание, время жизни и т.д. Конкретные методы и свойства тип prepare запросов в разных библиотеках называются по разному, но и это можно в общий предка метод вынести).

Sashauaнапример в интерфейсе есть набор фильтров и баттон "Применить"
....то для всех возможных комбинаций всхе возможных фильтров по отдельному TQuery на форму не кинешь все равно. И придётся либо на клиенте накладывать фильтр поверх "select * from table;" - Briefcase, TClientDataset, etc. Либо таки генерить SQL. В последнем случае создавать ли компонент или бросить его на форма, настроить ему все свойства и менять только SQL - какая разница?

ЛюбезныйТрата времени и ресурсов на пересоздание.

ОТОЖ! ведь пока Pentium мучается, создавая объект TQuery - пользователи уже по 100 раз поменяют наборы и значения фильтров.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793363
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для себя выработал такое правило. Если требуется отобразить данные в dbgrid, то проще кинуть на форму датасет и датасоурс. Именно на форму, а не на модуль данных. В модуле данных только общие для приложения ресурсы, например подключение к бд. Но в основном работа с бд выполняется динамически. Использую ibxFbUtils, что делает код весьма компактным. При этом учитываю, что prepare - это очень медленный этап при плохой сетке. Также стараюсь по возможности разрабатывать классы, например TUser, TContragent, и т.п. и в их методах реализовать всю работу с бд. В этом случае сложность программы уменьшается на порядки и никакой ORM не нужно.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793372
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для небольших задач (или подзадач) часто удобно всю работу с базой выносить в отдельный модуль(ли) с классом(ми), при создании которого ничего не происходит, а при обращении к свойствам/методам - создается что надо, если еще не создано. В деструкторе же все освобождается.
Очень удобно потом в разных потоках создавать этот класс, не нужно никакой синхронизации.
Ну и поменять субд просто, понятное дело.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793499
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerTContragent, и т.п. и в их методах реализовать всю работу с бд
....
Ariochнапример в общем классе-предке, типа Active Record

Насколько понимаю, тот же mORMot построен на этом принципе
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793513
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЛибо таки генерить SQL. В последнем случае создавать ли компонент или бросить его на форма, настроить ему все свойства и менять только SQL - какая разница?
Менять SQL не надо. Достаточно одной строки наподобие

Код: pascal
1.
Query.MacroByName('filter').Text := Filter.CreateSQL;



И какая разница... да, в общем, такая же, как и в других случаях. Фильтры здесь ничего не меняют.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793518
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Код: pascal
1.
MacroByName



в каком SQL-сервере есть в запросах макросы, изменение которых не потребует unprepare/prepare запроса?
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793521
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerФильтры здесь ничего не меняют.

меняют две вещи.

1) снимают требования к скорости - человек все равно медленнее
2) делают запросы не предсказуемыми (полный комбинаторный перебор всех варинантов всех фильтров) - их нельзя захардкодить и заранее создать по компоненту на каждый из всех возможных запросов
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793522
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochв каком SQL-сервере есть в запросах макросы, изменение которых не потребует unprepare/prepare запроса?
Меня удивляет постановка вопроса. Я не вижу в ней смысла. Есть ощущение, что Вы исходите из какого-то загадочного постулата, который я то ли пропустил, читая топик, то ли существует исключительно в Вашей голове.
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793524
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch1) снимают требования к скорости - человек все равно медленнее
К скорости чего?

Кроме того, я не понимаю, какое отношение скорость непонятночего имеет к теме топика. Тема топика - сравнение двух подходов. А по смыслу этих подходов они сравниваются с точки зрения качества/скорости/надёжности разработки и последующего сопровождения в таком стиле.

Ariochих нельзя захардкодить и заранее создать по компоненту на каждый из всех возможных запросов
А с какой стати вообще в голову приходит такой бред?
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793580
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerТакже стараюсь по возможности разрабатывать классы, например TUser, TContragent, и т.п. и в их методах реализовать всю работу с бд. В этом случае сложность программы уменьшается на порядки и никакой ORM не нужно.Уточняя терминологию: считывание объектов из БД и их сохранение обратно и есть O bject- R elational M apping.
То, что в данном случае ненужно - это сторонний ORM- Framework .
...
Рейтинг: 0 / 0
Интересует ваше мнение о двух разных подходах
    #39793630
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerAriochв каком SQL-сервере есть в запросах макросы, изменение которых не потребует unprepare/prepare запроса?
Меня удивляет постановка вопроса. Я не вижу в ней смысла. Есть ощущение, что Вы исходите из какого-то загадочного постулата, который я то ли пропустил, читая топик, то ли существует исключительно в Вашей голове.

Вы высказали тезис, что изменение SQL запроса с помощью StringReplace (или как угодно иначе реализованной макро-замены) не создаёт нового SQL запроса.

Но если он не создает нового запроса - значит ему не надо снова Prepare делать.
Если даже после макро-замены у нас все тот же старый SQL-запрос, то можно его запускать со старыми Prepare-данными.
...
Рейтинг: 0 / 0
25 сообщений из 42, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интересует ваше мнение о двух разных подходах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]