|
|
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
grexhideДа бросьте вы, чесслово. Доказывать преимущества Delphi перед Java, или наоброт Я не пытаюсь доказать то или другое. Мой оппонент попытался обосновать преимущества некоего подхода, который равно реализуем что на Java, что на Delphi, что на ассемблере. Я сомневаюсь в эффективности именно подхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:34:33 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer Хм. Как пикантная подробность - при обычной для большинства дельфи-приложений схеме линковки эти "лишние ктулхи" в exe-шник просто не попадают. Агащаз (с). А вызовы методов посредством RTTI как тогда работают? softwarer Vladimir Kozlov, потому что у начинающего дельфиста много готовых инструментов, и это его портит; Хм. Вы свой дом сами строили? Канализацию сами копали? Ах, какой Вы испорченный..... хотя мне почему-то кажется, что если бы Вы занимались вышеперечисленным, Вы либо жили бы в очень плохой квартире, либо были бы очень плохим программистом. На то и другое времени бы не хватило. Не путай ложку с гамбургером. softwarer Vladimir Kozlovу явера готовых инструментов меньше и ему приходится напрягаться. В результате - через год этот дельфист спрашивает "где взять?" а явер спрашивает "как сделать?" В результате, через год дельфист видел полно примеров качественного кода, а явер привык искать по интернету левые поделки авторства упомянутого Вами Васи Пупкина. Возможен другой вариант развития событий: через год у делфиста палитра трещит от компонентов, а явер научился писать сам. softwarer Vladimir KozlovГотовый компонент вызывает искушение засунуть его в проект и бежать дальше, а пример - посмотреть, подумать, взять какие-то идеи и написать самому. Угу. Итого в первом случае имеем: применяется хороший компонент и есть куча времени чтобы подумать и сделать на его основе свое хорошее решение. Во втором случае - смотрим наколеночный пример, наспех "пишем сами", потом так же наспех пишем то, для чего это собственно требовалось. В итоге то и другое плохо, зато новому спрашивающему "как сделать" гордо подсовываем свое наспех-решение и цикл переходит на новую итерацию. Опять же возможно другое развитие событий: компонент по-быстрому воткнут в палитру, а своего на его основе не сделано ибо и так сойдет. А при выходе новой версии дельфей начинается поиск новой версии компонента, ибо старая почему-то не компилится... За примером далеко ходить не надо: мне в жабе понадобилась таблица с фиксированными столбцами, которые не трогает горизонтальная прокрутка. Лезу в инет. Самое популярное у широких народных масс решение - 2 таблицы на одной модели, фиксированные колонки в одной таблице а прокручиваемые в другой, прокрутка по вертикали синхронизируется листенером. Кое-кто сделал умнее - присвоил вертикальный скроллер второй скроллеру первой. Посмотрел я на это, почесал репу и отправился искать дальше. Нашел намного более красивое решение, где всё сделано на одной таблице, а кастомиризуется контейнер-прокрутчик в которой она лежит. Взял код, протестил. Идея - замечательная, реализация - из рук вон. В общем 40% кода было нафиг выброшено а оставшиеся 60% - переписано, зато сейчас я имею компонент в работе которого полностью уверен :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:41:48 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
alexx726200,000 записей (которые МОГУТ БЫТЬ ВЫТЯНУТЫ из БД), означают ровно столько записей ПОКАЗАННЫХ на экране. А для чего тянуть на клиента кучу записей? Неужто для того чтобы из там обрабатывать? Думаю, что на клиента нужно тянуть только то что необходимо отобразить, а перелопачивать десятки тысяч записей - дело сервера... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:53:07 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer grexhideДа бросьте вы, чесслово. Доказывать преимущества Delphi перед Java, или наоброт Я не пытаюсь доказать то или другое. Мой оппонент попытался обосновать преимущества некоего подхода, который равно реализуем что на Java, что на Delphi, что на ассемблере. Я сомневаюсь в эффективности именно подхода. В большой команде, где четко расписаны все стандарты, и особое внимание уделяется надежности и качеству кода - подход обычно именно такой. Чужие готовые куски с подводными ктулхами применяют только в случаях, когда абсолютно уверены в том что из-за применения этих кусков система на продакшне не встанет раком в самый ответственный момент. Если это десктопное приложение типа "домашние финансы" - там можно и расслабиться, но есть системы где надежность жизненно важна, и там большая часть времени уходит отнюдь не на по-быстрому-написание кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 09:59:38 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov alexx726200,000 записей (которые МОГУТ БЫТЬ ВЫТЯНУТЫ из БД), означают ровно столько записей ПОКАЗАННЫХ на экране. А для чего тянуть на клиента кучу записей? Неужто для того чтобы из там обрабатывать? Думаю, что на клиента нужно тянуть только то что необходимо отобразить, а перелопачивать десятки тысяч записей - дело сервера... ;))) Да ну ? А сам подход J2EE ? Берем и проектируем виртуальные параллельные миры. Сервер БД - это просто хранилище, даешь тотальную мегаобработку обработку через резалтсеты и EQL (учитывая - незафиксированность транзакции) в массы! Говорите подход ? Ну ну.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 10:32:18 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer grexhideДа бросьте вы, чесслово. Доказывать преимущества Delphi перед Java, или наоброт Я не пытаюсь доказать то или другое. Мой оппонент попытался обосновать преимущества некоего подхода, который равно реализуем что на Java, что на Delphi, что на ассемблере. Я сомневаюсь в эффективности именно подхода. а) это в любом случае - спор - бесполезная штука по определению б) он остаивает подход, активно культивируемый "лучшими практиками" java строения. Ничего, кстати, удивительного в его доводах нет. Говоря проще - это не баг в головах, это фича ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 10:34:21 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir KozlovВ общем 40% кода было нафиг выброшено а оставшиеся 60% - переписано, зато сейчас я имею компонент в работе которого полностью уверен :) Извиняюсь, что влезаю в середину разговора. Почему бы тогда не писать на ассемблере, чтобы быть совсем уверенным в работе кода. А то ведь, кто их знает, как они реализовали эти высокоуровневые джавиные объекты и функции. PS. Не пытаюсь защитить дельфи или джаву, но аргументы, на мой взгляд, какие-то странные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:31:45 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
grexhide Vladimir Kozlov alexx726200,000 записей (которые МОГУТ БЫТЬ ВЫТЯНУТЫ из БД), означают ровно столько записей ПОКАЗАННЫХ на экране. А для чего тянуть на клиента кучу записей? Неужто для того чтобы из там обрабатывать? Думаю, что на клиента нужно тянуть только то что необходимо отобразить, а перелопачивать десятки тысяч записей - дело сервера... ;))) Да ну ? А сам подход J2EE ? Берем и проектируем виртуальные параллельные миры. Сервер БД - это просто хранилище, даешь тотальную мегаобработку обработку через резалтсеты и EQL (учитывая - незафиксированность транзакции) в массы! Говорите подход ? Ну ну.. Ээээ... а ты под сервером что имеешь в виду? Я печатными буквами написал "перелопачивать десятки тысяч записей - дело сервера" а ты пишешь "Сервер БД - это просто хранилище, даешь тотальную мегаобработку обработку через резалтсеты". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:41:34 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
pamir Vladimir KozlovВ общем 40% кода было нафиг выброшено а оставшиеся 60% - переписано, зато сейчас я имею компонент в работе которого полностью уверен :) Извиняюсь, что влезаю в середину разговора. Почему бы тогда не писать на ассемблере, чтобы быть совсем уверенным в работе кода. А то ведь, кто их знает, как они реализовали эти высокоуровневые джавиные объекты и функции. PS. Не пытаюсь защитить дельфи или джаву, но аргументы, на мой взгляд, какие-то странные. Выше в треде я писал: или то, что проверено на десятках тысяч инсталяций, или своя реализация. Так что к джавным объектам претензий нет :) Изначально речь шла о том, что в мире дельфи значительно больше "готовых компонентов", чем в джаве, и соответственно больше искушение их заюзать "as is". Анекдот в тему: Детский сад на прогулке в лесу. Воспитательница объявляет: "Дети, если будете рвать ягоды, одну ешьте а вторую оставляйте для судмедэкспертизы". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:54:11 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov Изначально речь шла о том, что в мире дельфи значительно больше "готовых компонентов", чем в джаве, и соответственно больше искушение их заюзать "as is". Да, это именно так. Значительно больше и на два порядка большей функциональности и на несколько порядков большей производительности и продуктивности. При наличии - десятков альтернатив. То, что есть проходные и просто отбросные варианты - так никто их и не принуждает пользовать. Этот же подход - вовсю разворачивается в C#/.NET А в мире... Java мда... Попробуйте найти нечто подобное DevExpress -овским компонентам. Лично мне - это не удалось в принципе. И большие сомнения, что подобный функционал - в принципе, практически и теоретически возможен в релизации хоть на SWT, хоть каких тупиковых Swing-ах. Скажете - пользователю это нафиг не нужно ? Угум, а вы этих пользователей - спрашивали ? У меня - даже пенсионерки вовсю уже пользуют и группировки, и промежуточные итоги, и фильтрации (особенно). И находят их - весьма удобными. И самое главное - они (делфийские и C#ные компоненты) позволяют все делать именно декларативно за считанные минуты, а не кодить постоянно сотни строк безумного "правильного" кода для примитивных операций, с конечным выходом - примитивный и глюкающий на пустом месте интерфейс (именно так и можно охарактеризовать поделия на Swing-ах). Далеко ходить не нужно - достаточно сравнить, вон - Oracle SQL Developer (с его довольно неплохим, на первый взгляд EWT Java фрейморком) и PL/SQL Developer или TOAD (писанные на презренных Delphi). При этом - если SQL Developer - внешне тянет даже на прорыв (во мнениях о способностях Java), то все равно - работать на нем, имея возможность сравнить - по сути, просто - себя не уважать (и по стабильности, и по производительности, и по многим параметрам, не говоря уже - про фунциональность). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 12:19:04 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
2Vladimir Kozlov Читал, много думал... Я может быть буковки какие-то пропускаю. Но понимания не нахожу... Итак, поведение гридов. 1) Выполняем select * from table. В таблице имеем 200,000 записей. Вопрос: Сколько записей поступило на клиент? Ответ: ни одной до fetch'a 2) делаем fetch (executeQuery() да што угодно) Вопрос: Сколько записей поступило на клиент? Ответ: Столько, сколько уместится на экране (задано в параметрах и т.д.) делаем PgDown, PgDown Вопрос: Сколько записей поступило на клиент? Ответ: 2 экрана Это стандартная работа ВСЕХ клиент-серверных DataSet (Oracle Forms, Centura, PowerBuilder, Delphi, Visual FoxPro, Oracle Objects и прочей братии) Теперь итоговые вопросы: 1) Где здесь проскочила фраза про перелопачивание тысяч записей. 2) Где это реализовано в стандартной Java-модели. Да, ResultSet заточен для этого, но Grid-то не заточен. Ну да, можно сделать (кстати отрисовочка получается - пальчики оближешь при fireTableRowsInserted во время getValueAt, пользователь испугается, selectedRow() скачет как мустанг при PgDown ;))). Все можно сделать. Можно вообще свой Grid нарисовать. Но зачем мне такой Swing, где должен все с нуля делать? Обидно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 12:26:28 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir KozlovВыше в треде я писал: или то, что проверено на десятках тысяч инсталяций, или своя реализация. Так что к джавным объектам претензий нет :) Совершенно случайно наткнулся, читая про JFormattedTextField Так что, баги есть у всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 13:41:09 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir KozlovАгащаз (с). А вызовы методов посредством RTTI как тогда работают? RTTI относится только к published коду. Published методов - довольно немного. Впрочем, если ты при отладке никогда не получал в watch окне ответ типа symbol was eliminated by linker - это всего лишь значит, что ты не слишком активно использовал отладчик. Vladimir KozlovНе путай ложку с гамбургером. А зачем их путать, если поедание гамбургера в твоем подходе начинается с топора - идешь в лес, рубишь сук, вырезаешь ложку.... Vladimir KozlovВозможен другой вариант развития событий: через год у делфиста палитра трещит от компонентов, а явер научился писать сам. Возможен. Только немного странен - дельфер на примерах хорошего кода пришел к плохому результату, а джавер на примерах плохого - к хорошему. Похоже, ты изобрел новую методику обучения. Vladimir KozlovОпять же возможно другое развитие событий: компонент по-быстрому воткнут в палитру, а своего на его основе не сделано ибо и так сойдет. Бывают компоненты, править которые действительно незачем. Но "по-быстрому воткнут в палитру" возможно только у совсем одиночек - в любой команде компонент потребуется положить в VCS, то есть он пройдет через самого грамотного человека в команде. Vladimir KozlovА при выходе новой версии дельфей начинается поиск новой версии компонента, ибо старая почему-то не компилится... Хм. Я готов поверить, что у тебя такое бывало, но сейчас, в связи с отсутствием вменяемого прогресса в версиях дельфей, этот аргумент неактуален. Vladimir KozlovЗа примером далеко ходить не надо: мне в жабе понадобилась таблица с фиксированными столбцами, которые не трогает горизонтальная прокрутка. Лезу в инет. Самое популярное у широких народных масс решение - 2 таблицы на одной модели, фиксированные колонки в одной таблице а прокручиваемые в другой, прокрутка по вертикали синхронизируется листенером. Кое-кто сделал умнее - присвоил вертикальный скроллер второй скроллеру первой. Посмотрел я на это, почесал репу и отправился искать дальше. Нашел намного более красивое решение, где всё сделано на одной таблице, а кастомиризуется контейнер-прокрутчик в которой она лежит. Взял код, протестил. Идея - замечательная, реализация - из рук вон. В общем 40% кода было нафиг выброшено а оставшиеся 60% - переписано, зато сейчас я имею компонент в работе которого полностью уверен :) Замечательно. Давай разберем чуть подробнее. 1. Идея переписывать контейнер под нужды его детей представляется мне малость... неконцептуальной. Собственно, ScrollPane в яве - вообще весьма спорный компонент; у него есть несомненные достоинства, но применять его как минимум малость надоедает (мне сразу вспоминаются мои компоненты, у которых был метод getScrollPane(), делавший что-то типа return new ScrollPane().add (this). 2. Существенным же я назвал бы тот факт, что Вы не нашли хорошего решения и потратили на его создание кучу времени, примерно столько же, сколько потратили бы на создание с нуля. Это имхо хуже, чем "найти решение, разобраться в нем и увидеть, что оно хорошо подходит". grexhideа) это в любом случае - спор - бесполезная штука по определению Ээ... Вы действительно уверены, что готовы рассказать, что именно мне полезно? Тогда я был бы рад консультации по применению view в StarTeam :) Vladimir KozlovИзначально речь шла о том, что в мире дельфи значительно больше "готовых компонентов", чем в джаве, и соответственно больше искушение их заюзать "as is". Не очень понимаю "искушения". Грубо говоря, из вариантов 1. Заюзать хорошее и во всех смыслах подходящее решение as is либо с мелкими доработками 2. Заюзать дерьмо as is либо с мелкими доработками 3. Писать свое или кардинальную переработку найденного в случае дельфы первый встречается довольно часто, в случае явы - очень редко (это уже мой опыт. Даже скачанное с sun.com приходилось изрядно обрабатывать напильником). Итого в случае дельфы есть искушение заюзать "as is", в случае явы есть искушение заюзать "дерьмо as is". Не уверен, что второй вариант лучше. pamirТак что, баги есть у всех. Не то слово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 15:29:36 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
бла-бла-бла. нечетал красивый лаф (раньше не встречал) http://regis.risp.pl/ а вообще можно из разных прог тупо надёргать. Из оракловых компонентов например, из борландового жбилдера и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 15:39:18 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
отсюда можно взять ещё http://javootoo.l2fprod.com/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 15:41:18 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
alexx7262Vladimir Kozlov 1) Выполняем select * from table. В таблице имеем 200,000 записей. Вопрос: Сколько записей поступило на клиент? Ответ: ни одной до fetch'a Ответ: В сегменты отката СУБД записалось 200 000 записей, в зависимости от СУБД клиент либо блокирует всех писателей (в некоторых СУБД), либо просто рискует нарваться на snupshot too old (как в ORACLE). Клиент терпеливо ждет завершения не нужного ему select (пусть пока на сервере). При многих таких "клиентах", резко падает масштабируемость СУБД, подвисают важные отчеты ... Ну нам то по-фигу, мы же умные - вот хотим 200000 записей и все тут. :) 2) делаем fetch (executeQuery() да што угодно) Вопрос: Сколько записей поступило на клиент? Ответ: Столько, сколько уместится на экране (задано в параметрах и т.д.) Ответ: зависит от того применяет ли клиент базы (не путайте со своим самописным кодом - это обычно стандратный класс для работы с СУБД) локальный буфер на жеском диске клиента. По хорошему - на клиентский компьютер, в буферный файл (это если очень грубо) поступили ВСЕ 200 000 записей (ну, или см. ниже про lazy read), но ваше приложение (похоже и вас тоже) пока это "не колеблет". :) Пользователь опять же ждет. В локальной сети вы этого почти и не замечаете, в WEB или ежели у вас реально нашруженное приложение - разговор с таким подходом уже закончен. делаем PgDown, PgDown Вопрос: Сколько записей поступило на клиент? Ответ: 2 экрана Ответ: см. выше + теперь еще в само приложение реально отобразилось (использует RAM) либо ОДИН экран, либо уже два (это зависит от механизма буферизации уже самого приложения). Кстати, если в это момент вы захотите сделать столь любимую многими произвольную сортировку или добавить фильтр - интересно, вы понимаете, что придется проделать "за кулисами" такого требования при 200 000 записях? :) 1) Где здесь проскочила фраза про перелопачивание тысяч записей. Увы, не пытайтесь изобрести чуда - в реальной базе, если это не read-only tables + lazy fetch или логика допускает чтение несогласованных записей (последнее IMHO верх уродства), то ваше приложение ОБЯЗАНО сожрать все, что оно запросило в максимально короткий срок. Иначе НЕ БЫВАЕТ. Точнее, если вы такое наваяли, а ваш DBA немедленно не настучал вам по мозгам, то его надо уволить. 2) Где это реализовано в стандартной Java-модели. Да, ResultSet заточен для этого, но Grid-то не заточен. Что реализовано? ResultSet с перемещением в обоих направлениях - это и есть ваша "серебряная пуля" с буферизацией на диск - никакого отличия по принципу действия со всем, что вам знакомо. Нужно действительное lazy read? Ну так читайте порциями, а гриду сразу скажите реальный count (если знаете приблизительное кол-во, то можно просто заведомо большее число). И еще раз - GRID это отображение данных в удобной графической форме. Это НЕ ОТЧЕТ! Если клиент тянет в GRID даже 1000 записей, то вам надо срочно переделывать логику своей программы. В GRIDe от SWING очень напрягает отсутствие наличия вариантов "для чайников" - ну всякие там фиксированные колонки и ряды, удобное форматирование числовых и строковых данных и т.п., т.е. налицо IMHO ослиные уши просто ленивых разработчиков. И мне действительно пофигу, что я научился (более или менее) все это менять под свои интересы - спрашивается на кой ляд мне это надо, если меня стандартная GUI функциональность подобных гридов в других средах устраивала в 80% случаев? А вот работа с данными тут реализована очень правильно и не надо нападать на MVC - очень грамотное решение. Между прочим, по существу, в той же Delphi это приблизительно так и реализовано, только сокрыто от пользователя за семью замками, что отнюдь не способствует созданию хороших приложений. Кстати, если не подходить к GRID как к "чудо огромно, озорно и лаяще" и выбирать действительно нужные данные, то всякие там мечты про сортировки, фильтры, группировки и другие извращения реализуются на порядок проще, чем в той же Delphi. Несмотря на все вышесказанное, считаю, что SWING проработан недостаточно, отсутствует много функционала, который он обязан содержать, мало нормальных стандратных решений, и вообще, производит впечатление продукта, который ПОЧТИ довели, но помешало что-то другое. Вот только раздражает, когда ему в вину ставят совсем уж к нему не относящееся, как в странном примере с 200 000 записей. Или, того лучше, сильные свойства - например, мощнейшие возможности по самому изощренному форматированию объявляют отсутствующими просто потому, что сами ими пользоваться не умеют/ не хотят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:15:41 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
carper[quot alexx726]2Vladimir Kozlov 1) Выполняем select * from table. В таблице имеем 200,000 записей. Вопрос: Сколько записей поступило на клиент? Ответ: ни одной до fetch'a Ответ: В сегменты отката СУБД записалось 200 000 записей, ... [quot] Ага. щаз. на каждый селект еще будем чето в роллбэки песать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:21:54 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
1024бла-бла-бла. нечетал красивый лаф (раньше не встречал) http://regis.risp.pl/ а вообще можно из разных прог тупо надёргать. Из оракловых компонентов например, из борландового жбилдера и пр. отсюда можно взять ещё http://javootoo.l2fprod.com/ Уррра!!! Кроме оффтопиков ответ по делу, спасибо большое! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:39:41 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
carper Ответ: В сегменты отката СУБД записалось 200 000 записей, в зависимости от СУБД клиент либо блокирует всех писателей (в некоторых СУБД), либо просто рискует нарваться на snupshot too old (как в ORACLE). Клиент терпеливо ждет завершения не нужного ему select (пусть пока на сервере). При многих таких "клиентах", резко падает масштабируемость СУБД, подвисают важные отчеты ... Ну нам то по-фигу, мы же умные - вот хотим 200000 записей и все тут. :) А я вот никак понять не могу - даже при суперумном гриде (кстати, энтузиастам DevExpress рекомендую отселектить 200000 записей и включить в гриде фильтрацию) - неужели найдется такой пользователь который осилит все 200000 в гриде просмотреть? :) carper Ответ: зависит от того применяет ли клиент базы (не путайте со своим самописным кодом - это обычно стандратный класс для работы с СУБД) локальный буфер на жеском диске клиента. По хорошему - на клиентский компьютер, в буферный файл (это если очень грубо) поступили ВСЕ 200 000 записей (ну, или см. ниже про lazy read), но ваше приложение (похоже и вас тоже) пока это "не колеблет". :) Пользователь опять же ждет. В локальной сети вы этого почти и не замечаете, в WEB или ежели у вас реально нашруженное приложение - разговор с таким подходом уже закончен. А какие при этом финты ушами вытворяет ADODataset в связке с MSSQL - вообще не передать словами... carper И еще раз - GRID это отображение данных в удобной графической форме. Это НЕ ОТЧЕТ! Если клиент тянет в GRID даже 1000 записей, то вам надо срочно переделывать логику своей программы. +1. Хотя на свинговском гриде офигенно удобно лепить кубический грид. carper В GRIDe от SWING очень напрягает отсутствие наличия вариантов "для чайников" - ну всякие там фиксированные колонки и ряды, удобное форматирование числовых и строковых данных и т.п., т.е. налицо IMHO ослиные уши просто ленивых разработчиков. И мне действительно пофигу, что я научился (более или менее) все это менять под свои интересы - спрашивается на кой ляд мне это надо, если меня стандартная GUI функциональность подобных гридов в других средах устраивала в 80% случаев? Но можно написать своё. Да, время теряется, которое можно было бы потратить на собственно логику программы. Но - время теряется один раз. Пишешь один раз - юзаешь везде. carper А вот работа с данными тут реализована очень правильно и не надо нападать на MVC - очень грамотное решение. Между прочим, по существу, в той же Delphi это приблизительно так и реализовано, только сокрыто от пользователя за семью замками, что отнюдь не способствует созданию хороших приложений. У меня в наследнике TableModel живет более-менее похожий на дельфийский FieldsCollection :) Ну и соответственно всякие FindField, GetFieldByName, SetFieldByName. А теперь сюрприз - для вычисляемых полей есть флажок - вычислять один раз в пределах жизни модели или при каждом обращении. Причем это где-то там в кишках модели кэшируется и совершенно не озабочивает приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:55:24 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Timm carper alexx7262Vladimir Kozlov 1) Выполняем select * from table. В таблице имеем 200,000 записей. Вопрос: Сколько записей поступило на клиент? Ответ: ни одной до fetch'a Ответ: В сегменты отката СУБД записалось 200 000 записей, ... Ага. щаз. на каждый селект еще будем чето в роллбэки песать. Воткни в список полей селекта UDF-ку апдейтящую данные :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 16:56:38 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
2Carper )))))))))))))))))) Мы с Вами по-моему разговариваем на разных языках. Знание Java не освобождает от ответственности за незнание работы СУБД. Настучать по мозгам исчо мне нужно оказывается :). Я рассказывал о том, как работают СТАНДАРТНЫЕ DataSets для работы с базой. Вы мне рассказываете видимо о существующих реализациях DataSet в Java (какие-то файлы локальные :0) Разумеется, ведь ни в одном из увиденных я не встречал понятия fetchSize. База не выдает ничего на клиента, пока он не попросит. Более того, при отсутствии каких-либо агрегатов или OLAP-функций она даже с диска их не считает в DataBuffers. Только минимальную выборку. И вот именно ее я хочу увидеть (и увижу) на клиенте. Захотел увидеть еще - сделал fetchNext(). Видимо серьезные разработчики Java еще не дошли до таких "мудреных" операций. Вот и получаются у них CachedDataSet, JdbcDataSet, Hibernate, ADF (с своей прослойкой объектов базы - вот умора, так и не понял как произвольный SQL запрос сделать в этих монстрах) и прочая мутотень (может быть и необходимая для браузера, хотя не думаю, ну отвалилась сессия - будь добр reconnect() сделать) абсолютно не пригодная в Desktop-приложениях. Дочитал до "Если клиент тянет в GRID даже 1000 записей, то вам надо срочно переделывать логику своей программы." и понял, что отвечать не надо было :)) Никогда с TOAD или MS-SQL Explorer не работали? Что, сильно клиента выборки из больших таблиц напрягають? Может компьютер вешается? Как думаете, почему - да потому что см.выше А вообще дискуссия даже на спор не тянет. Да и тема другая была. Опять же - вспылил, прочитав первую хохму автора про "недопрограмммеров" и "тысячи записей на клиента" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:05:03 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov А я вот никак понять не могу - даже при суперумном гриде (кстати, энтузиастам DevExpress рекомендую отселектить 200000 записей и включить в гриде фильтрацию) - неужели найдется такой пользователь который осилит все 200000 в гриде просмотреть? :) Да не осилит никто, это все тайно понимают. Но иначе ведь придется ломать голову как клиенту не дать этого сделать не вызвав неудовольствия последнего, а психология это слабое место программистов. :) А какие при этом финты ушами вытворяет ADODataset в связке с MSSQL - вообще не передать словами... А какие, а то я не разбирался? Что-то особенного? :) Но можно написать своё. Да, время теряется, которое можно было бы потратить на собственно логику программы. Но - время теряется один раз. Пишешь один раз - юзаешь везде. Просто далеко не всем это нужно, а вхождение новичка в JAVA неоправдано замедляет. Чисто психологически очень приятно, когда тебе подставляют надежное плечо, а не бросают в прорубь - может последний метод и хорош, но почему-то мало кому нравится. :) У меня в наследнике TableModel живет более-менее похожий на дельфийский FieldsCollection :) Ну и соответственно всякие FindField, GetFieldByName, SetFieldByName. А теперь сюрприз - для вычисляемых полей есть флажок - вычислять один раз в пределах жизни модели или при каждом обращении. Причем это где-то там в кишках модели кэшируется и совершенно не озабочивает приложение. Я бы все же вынес это, хотя бы частично, в шлюз таблицы данных. А с вычисляемыми данными не совсем понял - зачем флажок? null - считаем, что-то другое либо пересчитываем, либо нет, в зависимости от флажка? Я правильно понял? Если так, то для сложных вычислений IMHO правильное решение, а для простых вычислений, я бы лучше не кэшировал - память тоже штука дорогая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:10:08 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
alexx7262Carper )))))))))))))))))) А вообще дискуссия даже на спор не тянет. Извините, думаю, погорячился, вступив в дискуссию, можете продолжать в том же духе. :) Ну разве что заступлюсь за TOAD - вы бы помониторили, что он реально делает на вашем примере из 200 000тыс. записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:17:45 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
можно документацию почитать void setFetchSize(int rows) throws SQLException Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed. The number of rows specified affects only result sets created using this statement. If the value specified is zero, then the hint is ignored. The default value is zero. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:18:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34093534&tid=2146756]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 446ms |

| 0 / 0 |
