08.06.2008, 11:32 | #1 |
Участник
|
Как правильно писать SQL-запросы
Цитата:
Многие считают, что везде, где можно использовать "чистый" SQL вместо объектно-ориентированного подхода, нужно его использовать. Это заблуждение.
А также http://www.citforum.ru/database/arti...l_refactoring/ |
|
08.06.2008, 11:56 | #2 |
Участник
|
Цитата:
Многие считают, что везде, где можно использовать "чистый" SQL вместо объектно-ориентированного подхода, нужно его использовать. Это заблуждение.
Как пересекаются Sql запросы и объектно-ориентированного подход. SQL используется для доступа к данным. Объектно-ориентированного подход для хранения полученых с помощью sql данных. Главное знать период жизни полученной информации. Проблемы с запросами бывают в тот момент когда одна и таже информацию выбирается из бызы дважды. Это проблема. К примеру один програмист делает какую нибудь модификацию, делает запрос получает данные. Потом другой программист делает другую модификацию и в соседнем методе по невнимательности может написать тот же запрос. А вообще нужно проводить время от времени инвентаризацию кода. Что-то упрощать, от чего-то отказываться. Но ресурсы под это никто не даст. |
|
08.06.2008, 12:30 | #3 |
Участник
|
Никак.
В оригинале было про "чистые" SQL запросы и объектно ориентированный подход Цитата:
Примерный вид решения на SQL:
SQLObject object = executeQuery ( "SELECT u.name user_name, dep.name dep_name/n" + "FROM USERS u, DEPARTMENTS dep/n" + " AND u.user_id = ?/n" + " AND u.department_id = dep.department_id", userID ) Примерный вид решения с использованием API: User user = new User(userID); Department department = user.getDepartment(); В чем преимущества первого решения: оно работает быстрее второго. В чем преимущество второго: оно более воспринимаемо человеком, и его намного легче поддерживать. Конечно, если этот код вызывается очень часто или разница во времени выполнения слишком большая, то следует использовать первый вариант. Во всех остальных случаях лучше взять второй, т. к. нужно думать о людях, а не о выигрыше миллисекунд. |
|
08.06.2008, 13:05 | #4 |
Участник
|
У него же всё равно в getDepartment этот sql запрос сидит или в конструкторе new.
Просто постановку вопроса нужно подругому ставить. Писать ли класс оболочку для этого запроса или нет? Нет не писать. А вот класс оболочку для таблиц user и departament писать нужно. Может и не одну. Если это важные таблицы. В идеале даже если не важные, но в реале так не бывает. В Axapte много место где под таблицы создаются два класса. Первый для некой выборки экземпляров какой-нибудь сущности и сохранения их для последующего пользования без повторного запроса, второй для работы с одним экземпляром этой сущности. |
|
08.06.2008, 13:19 | #5 |
Участник
|
Цитата:
Почему это? Он и рассуждает на тему - писать запросы или пользоваться оболочками (возможно, не "оптимальными" в каждом конкретном случае) |
|
08.06.2008, 13:33 | #6 |
Участник
|
Цитата:
Тогда наверное всё зависит от количества записей. При малых объёмах полюбому второй подход. При больших первый. Тут уж выбирать не приходиться, когда тормоза пошли. Сложно сказать. Я бы не стал. Лучше бы нашёл класс который наиболее всего представляет данные таблицы и повесел бы статическим методом. |
|