|
|
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
carper Vladimir Kozlov А я вот никак понять не могу - даже при суперумном гриде (кстати, энтузиастам DevExpress рекомендую отселектить 200000 записей и включить в гриде фильтрацию) - неужели найдется такой пользователь который осилит все 200000 в гриде просмотреть? :) Да не осилит никто, это все тайно понимают. Но иначе ведь придется ломать голову как клиенту не дать этого сделать не вызвав неудовольствия последнего, а психология это слабое место программистов. :) Да тут даже не психология нужна а книги по юзабилити :) carper А какие при этом финты ушами вытворяет ADODataset в связке с MSSQL - вообще не передать словами... А какие, а то я не разбирался? Что-то особенного? :) На больших запросах - таки да, вплоть до наглого пожирания виртуальной памяти в момент открытия датасета. Шаманство с серверными курсорами тоже не всегда помогает. А вот SQLDirect от российского автора работает на тех же запросах прекрасно. carper Но можно написать своё. Да, время теряется, которое можно было бы потратить на собственно логику программы. Но - время теряется один раз. Пишешь один раз - юзаешь везде. Просто далеко не всем это нужно, а вхождение новичка в JAVA неоправдано замедляет. Чисто психологически очень приятно, когда тебе подставляют надежное плечо, а не бросают в прорубь - может последний метод и хорош, но почему-то мало кому нравится. :) Согласен. Влезая в жабу нужно быть готовым к тому что попотеть придется. carper У меня в наследнике TableModel живет более-менее похожий на дельфийский FieldsCollection :) Ну и соответственно всякие FindField, GetFieldByName, SetFieldByName. А теперь сюрприз - для вычисляемых полей есть флажок - вычислять один раз в пределах жизни модели или при каждом обращении. Причем это где-то там в кишках модели кэшируется и совершенно не озабочивает приложение. Я бы все же вынес это, хотя бы частично, в шлюз таблицы данных. А с вычисляемыми данными не совсем понял - зачем флажок? null - считаем, что-то другое либо пересчитываем, либо нет, в зависимости от флажка? Я правильно понял? Если так, то для сложных вычислений IMHO правильное решение, а для простых вычислений, я бы лучше не кэшировал - память тоже штука дорогая. Нет, с вычисляемыми данными у меня так: если данное поле данной записи уже посчитано - возвращаем из кэша, если не посчитано, считаем и кладем в кэш. Если флажок не выставлен - игнорируем кэш и считаем всегда. Всё это живет в onGetValue, расчет вычисляемых полей вынесен в листенер, которому в эвенте приезжает имя поля и номер строки в модели. А что ты под шлюзом имеешь в виду? У меня наследник AbstractTableModel, в котором живут собственно данные и информация о полях, т.е. метаданные; там же через интерфейсы подвешены форматтеры и код создания рендереров. Далее он может подключаться к гриду напрямую (в простейшем случае) или через набор статических методов, если требуется кастомизация грида в плане непрокручиваемых столбцов или сгруппированных заголовков. Всё это получилось прекрасно расширяемым и уже вовсю юзается в тестовой версии проекта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 17:51:03 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
alexx726Дочитал до "Если клиент тянет в GRID даже 1000 записей, то вам надо срочно переделывать логику своей программы." и понял, что отвечать не надо было :)) Не надо. Это стандартная песня. Ровно так же, когда дело доходит до веба, оказывается, что клиенту очень даже удобно (..длинный список глупостей..) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:07:43 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov[quot carper][quot Vladimir Kozlov] На больших запросах - таки да, вплоть до наглого пожирания виртуальной памяти в момент открытия датасета. Ага, понял, спасибо. Согласен. Влезая в жабу нужно быть готовым к тому что попотеть придется. Попотеть-то многие может и не отказались, только лично у меня при общении со SWING сначала закралось (хорошо хоть рискнул разобраться) подозрение, что меня сильно обманывают, насчет возможностей языка. :) А что ты под шлюзом имеешь в виду? Нет, я малек погорячился, здесь настоящий шлюз не причем, точнее не причем в данном контексте. Мне показался несколько тяжеловатым получающийся класс - возникла мысль о выносе всяких там FieldByName в отдельный класс - далее сработала аналогия по работе шлюза с реальной базой с аналогичными функциями - в общем поток сознания... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:08:33 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
carper Нет, я малек погорячился, здесь настоящий шлюз не причем, точнее не причем в данном контексте. Мне показался несколько тяжеловатым получающийся класс - возникла мысль о выносе всяких там FieldByName в отдельный класс - далее сработала аналогия по работе шлюза с реальной базой с аналогичными функциями - в общем поток сознания... :) Собственно сам FieldCollection (содержащий инфу о типах полей и прочие приблуды) вынесен в отдельный класс. У него есть int FindField(String). Экземпляр класса живет в модели. Ну а дальше всё просто :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:21:04 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer alexx726Дочитал до "Если клиент тянет в GRID даже 1000 записей, то вам надо срочно переделывать логику своей программы." и понял, что отвечать не надо было :)) Не надо. Это стандартная песня. Ровно так же, когда дело доходит до веба, оказывается, что клиенту очень даже удобно (..длинный список глупостей..) На вебе, кстати, 1000 записей на узком линке - утонченный садизм :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 18:24:16 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
бла-бла-бла показывать юзеру грид с миллионом записей и при каждом запросе перекачивать на клиента миллион с сервера это разные вещи. Не умеешь - не берись, не зная броду не лезь в воду, ученье свет и т.д. Ну или просто купить типа такого http://www.jidesoft.com/products/grids.htm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 19:21:08 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
1024бла-бла-бла Ну или просто купить типа такого http://www.jidesoft.com/products/grids.htm Ни хрена себе контролы! Кстати Product Bundle по цене вполне конкурентоспособен с девэкспрессом ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 20:46:14 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
"Ну разве что заступлюсь за TOAD - вы бы помониторили, что он реально делает на вашем примере из 200 000тыс. записей." Ох уж эти ламеры... Ты понимаешь, разницу между executeQuery() и last() Если твое приложение last() делает - это ТВОЁ приложение. И не надо ля-ля. Это ТЫ написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 21:03:44 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov А я вот никак понять не могу - даже при суперумном гриде (кстати, энтузиастам DevExpress рекомендую отселектить 200000 записей и включить в гриде фильтрацию) - неужели найдется такой пользователь который осилит все 200000 в гриде просмотреть? :) В DevExpress ? а) просмотреть все 200 тыс. записей- нет б) запросить (задав слишком широкие критерии) - всегда пожалуйста (криминала тут нет) в) в DevExpress - есть режим PartialLoad - когда на клиента тянутся только записи по мере скролла, т.е. - куммулятивно по требованию. Если пользователю припечет держать 10-20 мин. зажатым PgDn, то 200 тыс. записей ему, вероятно, удастся отфетчить (а Ctrl+PgDn - в "конец" - тут не пройдет) г) фильтры, общие суммы и прочая радость - все это также работает в данном случае на режимах частичной загрузки, и с возможностью перекрытия (можно заменить тупые обработки массивов и деревьев на базовую логику SELECT DISTINCT // значения для фильтров SELECT SUM() // итоги SELECT FROM WHERE <Filter> // данные для фильтров SELECT SUM() GROUP BY GROUPING SETS // итоги для групп.... - и т.д. - и т.п. ---- Вся суть программирования Grid View-Controller-а (в подходе к DevExpress) - сводится к простому - найти функционал, освоить, начать применять. - А не - "не найти функционал, изобрести велосипед с дестким функционалом, попробовать научиться на нем ездить, набить шишек, порвать с десяток штанишек и т.д." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 21:15:49 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir KozlovНа вебе, кстати, 1000 записей на узком линке - утонченный садизм :) Особенно с учетом компактности html как средства передачи информации - безусловно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 21:29:56 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
А о чем собственно разговор? Судя по репликам, Casper - вообще никогда в жизни не писал DB-приложения. Сам автор имеет весьма смутное представление о СУБД (очередная хохма на тему "вставьте UDF-Делающую Упдейт в запрос" меня лично очень сильно рассмешила, шутка принята...) А остальные "дискуссионеры-противники" таки не понимают разницы между next() и last(). Причем можно видимо удавицо или перейти на чисто олбанский - всё равно не понимают. Ребята, флаг вам в руки!!! "- Мы не будем петь дуэтом. - А почему? - Ну разве ты не слышишь? - Нет. - Ну вот видишь..." (c) "Берегите женщин" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 22:09:20 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
grexhideИ самое главное - они (делфийские и C#ные компоненты) позволяют все делать именно декларативно за считанные минуты, а не кодить постоянно сотни строк безумного "правильного" кода для примитивных операций, с конечным выходом - примитивный и глюкающий на пустом месте интерфейс (именно так и можно охарактеризовать поделия на Swing-ах). Далеко ходить не нужно - достаточно сравнить, вон - Oracle SQL Developer (с его довольно неплохим, на первый взгляд EWT Java фрейморком) и PL/SQL Developer или TOAD (писанные на презренных Delphi). При этом - если SQL Developer - внешне тянет даже на прорыв (во мнениях о способностях Java), то все равно - работать на нем, имея возможность сравнить - по сути, просто - себя не уважать (и по стабильности, и по производительности, и по многим параметрам, не говоря уже - про фунциональность).Т.е. можно кинуть в sun.com мыльце дескать "мы тут посовещались и grexhide решил, выпуск Java SE 6.0, а равно и Java 7.0 SE отменяется, так Гослингу и передайте, ибо никому это нефункциональное гугно не нужно. А Дельфи на самом деле не умер, а живее всех живых, ибо DevEx еще нужно продавать, не все средства, затраченные на разработку, отбить успели". Так, чтоли? Кстати, DevEx для .NET ты почем купил? Весь пакет или только часть? Ась? [q]Вопрос: Сколько записей поступило на клиент? Ответ: Столько, сколько уместится на экране (задано в параметрах и т.д.) делаем PgDown, PgDown Вопрос: Сколько записей поступило на клиент? Ответ: 2 экрана Это стандартная работа ВСЕХ клиент-серверных DataSet (Oracle Forms, Centura, PowerBuilder, Delphi, Visual FoxPro, Oracle Objects и прочей братии)[/q]Мда? Ну тогда объясни, почему возникают темы вроде этой http://forum.ixbt.com/topic.cgi?id=26:32933 ? Люди что, себе специально в ногу стреляют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 00:35:37 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer Vladimir KozlovНа вебе, кстати, 1000 записей на узком линке - утонченный садизм :) Особенно с учетом компактности html как средства передачи информации - безусловно. В html помимо собственно самих данных будут приезжать обрамляющие их теги <td>, <tr> и прочее. Плюс к тому - если нужны какие-то действия по щелчку на строке - еще href, плюс class для css-оформления (и не исключено что для разных td-шек он будет разным, т.е. должен приходить с каждой строкой). Так что в результате объем трафика раза в 2-3 вырастет. Ну это конечно в том случае если втупую плоский html гонять. Если xml передавать и лепить контент на клиенте - опять всё не очень весело, поскольку теги xml-я тоже трафика покушать хотят. Ну хотя с xml-ем полегче будет, но все равно не сахар. Да и на голых данных, предполагая что вообще тегов никаких нет - если средний размер данных одной строки принять 100 байт - то на 1000 строках это 100кило. Диалапный пользователь от таких страничек быстро озвереет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 09:37:23 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir KozlovТак что в результате объем трафика раза в 2-3 вырастет. Это изрядно скромная оценка. Реальная повыше, особенно если не заниматься онанизмом и не экономить байты, называя классы как-нибудь типа p1, p2, p3.... Vladimir KozlovДа и на голых данных, предполагая что вообще тегов никаких нет - если средний размер данных одной строки принять 100 байт - то на 1000 строках это 100кило. Диалапный пользователь от таких страничек быстро озвереет :) У меня было приложение, где диалапные пользователи сидели на модемах 9600. И ничего, нормально работали, не жаловались, единственно dataset.last() был доработан для возможности прерывания его выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 09:44:00 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
alexx726 Сам автор имеет весьма смутное представление о СУБД (очередная хохма на тему "вставьте UDF-Делающую Упдейт в запрос" меня лично очень сильно рассмешила, шутка принята...) Могу рассказать тебе где я применяю именно UDF-Делающую Упдейт в запросе. Итак, есть большой-пребольшой каталог товара. Есть субконто "Фирма" и "место хранения". И есть таблица с бухпроводками двойной записи, формирующаяся при проведении документов. Задача: оперативно получать остатки и себестоимости товара. Что я сделал: завел таблицу с кэшем остатков/себестоимостей. Навешенный на таблицу проводок триггер на вставку/удаление грохает записи в кэше с кодом товара соответствующим вставляемым/удаляемым записям. Просто втупую вычищает из кэша соответствующие строки. И есть UDF-ка, которой передается код товара и субконто. Первым делом она смотрит в кэш - если данные есть, значит с момента ее последнего вызова новых проводок с данным товаром не было и старых не удалялось, в этом случае она просто достает данные из кэша и отдает наружу. Если в кэше данных не было - пересчитывает на основании таблицы проводок и кладет в кэш. В результате, вставив эту удф-ку в селект из таблицы товаров, я прозрачно и быстро получаю текущее состояние склада. Пересчитывать и апдейтить этой удф-ке приходится-то намного меньше, чем просто из кэша доставать; для примера полный селект по каталогу с вытаскиванием в грид 6000 записей в ява-приложении происходит 0.7 секунды, а если предварительно грохнуть весь кэш - 18-20 секунд. Спросишь - почему я не пересчитываю кэш в триггере на таблицу проводок? А потому. Потому что в этом варианте реализации я могу, засомневавшись вдруг в правильности расчетов (запущенный случай паранойи), грохнуть кэш и пересчитать заново. Потому что, если вдруг придет в голову добавить расчет по LIFO, я добавлю еще пару строк кода внутри UDF-ки, и при следующем вызове в кэше окажутся дополнительные строки с новыми цифрами безо всякого вмешательства с моей стороны и ручного запуска процедуры перерасчета из-за изменений алгоритма. В системе - 60 клиентов. Терминалка. Юзеры не жужжат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 09:55:51 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
softwarer Vladimir KozlovТак что в результате объем трафика раза в 2-3 вырастет. Это изрядно скромная оценка. Реальная повыше, особенно если не заниматься онанизмом и не экономить байты, называя классы как-нибудь типа p1, p2, p3.... Можно пропускать код перед загрузкой на сервак через самописный обфускатор, который нормальные имена классов поменяет на p1,p2,p3 :) Кстати, очень нехилый выигрыш удается получить на компрессии (юзаю OpenVPN, там неплохая lzo-компрессия, выигрыш в трафике примерно в 1.8 раза получается по моим тестам). softwarer Vladimir KozlovДа и на голых данных, предполагая что вообще тегов никаких нет - если средний размер данных одной строки принять 100 байт - то на 1000 строках это 100кило. Диалапный пользователь от таких страничек быстро озвереет :) У меня было приложение, где диалапные пользователи сидели на модемах 9600. И ничего, нормально работали, не жаловались, единственно dataset.last() был доработан для возможности прерывания его выполнения. 9600? Круто. А на клиенте был браузер или tty ? :) Кстати, как ты прерывал с клиента dataset.last() - через ajax-вызов или как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 10:04:00 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
PlafНу тогда объясни, почему возникают темы вроде этой http://forum.ixbt.com/topic.cgi?id=26:32933 ? Люди что, себе специально в ногу стреляют? Обрати внимание, что там человек страдает с ADO :) да еще и 300000 записей через адо пытается вытянуть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 10:07:11 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Предлагаю создать форум для людей с ломкой после перехода на java с дельфей. Там они смогут проходить реабилитацию, рассказывая друг другу какая дельфи мощная штука и как многого им не хватает в жаве. Говорить о том как здорово кидать на форму TDataSet и TDBGrid и завязывать их друг с другом через TDataSource.... потом они будут рассказывать какой великолепный интерфейс они лепили используя quantum grid и как туда легво грузилось 200k записей... которые у них "бабульки" потом группировали на клиенте softwarer Не надо. Это стандартная песня. Ровно так же, когда дело доходит до веба, оказывается, что клиенту очень даже удобно (..длинный список глупостей..) Очень интересно послушать когда и где это удобно в вебе :) И как это реализуется с помощью открытого server-side курсора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:04:29 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
funikovyuriПредлагаю создать форум для людей с ломкой после перехода на java с дельфей. ... Там будут апщаться 2 пэрца. Не будем показывать пальцем кто ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:10:11 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
да балаболки какие-то. Ну привык чел к дельфи, ну не хочет видеть очевидного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:11:36 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Timm funikovyuriПредлагаю создать форум для людей с ломкой после перехода на java с дельфей. ... Там будут апщаться 2 пэрца. Не будем показывать пальцем кто Когда человек первый раз пробует закурить - у него кружится голова, тошнит, слабеют ноги... но проходит время - и без сигареты он уже не может. Так же и ява - сначала плюешься, но потом есть риск втянуться. А Минздрав предупреждал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:35:16 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov Timm funikovyuriПредлагаю создать форум для людей с ломкой после перехода на java с дельфей. ... Там будут апщаться 2 пэрца. Не будем показывать пальцем кто Когда человек первый раз пробует закурить - у него кружится голова, тошнит, слабеют ноги... но проходит время - и без сигареты он уже не может. Так же и ява - сначала плюешься, но потом есть риск втянуться. А Минздрав предупреждал :) Здесь другой случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:36:52 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
Timm Здесь другой случай. Да, после палёной водки бордо урожая 1963 года кажется жуткой кислятиной :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:40:22 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
TimmЗдесь другой случай. Конечно другой. И никакой ломки ни у кого нет. Просто есть - неудачный опыт и трезвый взгляд на вещи с обеих сторон, возможно - вполне достаточный, чтобы не заниматься самоубеждением на грани отрицания очевидного (в каких случаях и что на практике считается гуаном). Проблема только в том, что грамотный делфиец достаточно просто раскатает техническими доводами любые поползновения против. А типовой джавер - ничем, кроме пустопорожнего пафоса, взять не сможет: "Дескать вы вообще все ламо, вера у вас неправильная, да и понять вам изначально не дано, наш тонкий лейтмотив мироздания, на мотив буддо/гуру созерцания, процесса рефлексии грид-в-еар-через-скроллпане-кодирования...." - Говоря проще - кому чего в жизни не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:57:51 |
|
||
|
Где взять хорошие LAF-ы?
|
|||
|---|---|---|---|
|
#18+
grexhide TimmЗдесь другой случай. И никакой ломки ни у кого нет. Просто есть - неудачный опыт и трезвый взгляд на вещи с обеих сторон Ну в общем это достаточно распространенный случай, когда больной отрицает факт болезни авторПроблема только в том, что грамотный делфиец достаточно просто раскатает техническими доводами любые поползновения против. А типовой джавер - ничем, кроме пустопорожнего пафоса, взять не сможет: В принципе возможно что "грамотный" дельфиец чего и раскатает, но я такого не в стречал. Грамотные все и так понимает и хер№;№%й на форумах заниматья не будет. Тут же мы наблюдаем сплошное надувание щек точно так как по вашим словам делает "типовой джавер". Есть мнение что дельфийцы здесь тоже типовые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 12:05:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34095350&tid=2146756]: |
0ms |
get settings: |
9ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
61ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
114ms |
get tp. blocked users: |
2ms |
| others: | 318ms |
| total: | 564ms |

| 0 / 0 |
