О выборе платформы для новых проектов
Nov. 3rd, 2009 10:58 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Вот тут ребе
belnetmon спрашивает совета про выбор платформы для новых проектов. Для проектов типа GUI или типа веб. Там в комментах советуют всякое страшное, но не в этом суть.
Что-то меня вообще такая формулировка вопроса смущает. Основная проблема при переходе с используемых платформ на новые - это то, что "все нужно переделывать". Вот, к примеру, я как-то попытался повторить идеи, использумые в софте на дельфи (обобщенный MDI-клиент для Firebird), на дотнете (сделать клиент к произвольной реляционной БД). Оно вообще получилось и работает. Но поголовно "все не так". Не так работают дата-гриды, не та модель работы с данными, непонятно, что использовать в качестве генератора отчетов, итд.
Если переходить на что-то еще менее привычное - предвижу всякое безумие, в плане того, что обязательно чего-нибудь привычного будет не хватать. Вот к примеру кроссплатформенная библиотека для RS232. Советуют boost.asio, но там нету ручного управления линиями(в документации с первого раза я это не нашел). Потому, что "никому не надо". И так, скорее всего, будет со всем. По опыту - будут библиотеки для любых целей, но конкретно мои задачи будут требовать от них каких-то функций, которых нет, потому что "никому не нужны".
Т.е., вопрос не "какую платформу выбирать", а "что выбрать, чтобы перейти с наименьшим напрягом, чтобы были библиотеки, чтобы потом было где искать разработчиков, и чтобы это не остановило всю работу".
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Что-то меня вообще такая формулировка вопроса смущает. Основная проблема при переходе с используемых платформ на новые - это то, что "все нужно переделывать". Вот, к примеру, я как-то попытался повторить идеи, использумые в софте на дельфи (обобщенный MDI-клиент для Firebird), на дотнете (сделать клиент к произвольной реляционной БД). Оно вообще получилось и работает. Но поголовно "все не так". Не так работают дата-гриды, не та модель работы с данными, непонятно, что использовать в качестве генератора отчетов, итд.
Если переходить на что-то еще менее привычное - предвижу всякое безумие, в плане того, что обязательно чего-нибудь привычного будет не хватать. Вот к примеру кроссплатформенная библиотека для RS232. Советуют boost.asio, но там нету ручного управления линиями(в документации с первого раза я это не нашел). Потому, что "никому не надо". И так, скорее всего, будет со всем. По опыту - будут библиотеки для любых целей, но конкретно мои задачи будут требовать от них каких-то функций, которых нет, потому что "никому не нужны".
Т.е., вопрос не "какую платформу выбирать", а "что выбрать, чтобы перейти с наименьшим напрягом, чтобы были библиотеки, чтобы потом было где искать разработчиков, и чтобы это не остановило всю работу".
no subject
Date: 2009-11-03 12:02 pm (UTC)Пора на покой
Date: 2009-11-03 12:03 pm (UTC)no subject
Date: 2009-11-03 12:09 pm (UTC)no subject
Date: 2009-11-03 12:14 pm (UTC)no subject
Date: 2009-11-03 12:24 pm (UTC)no subject
Date: 2009-11-03 05:49 pm (UTC)Если в борланде в 1995 году (!) замечательно спроектировали датагрид, то этого не отнимешь. Но почему-то почти блин 15 лет все, все изобретают свои велосипеды и не хотят проанализировать, что же сделано ДО них и перенять позитивный опыт.
Если у меня на том же QT с выстраиванием модели одна всего лишь табличка (грид базы данных) - это МОДУЛЬ, целиком. Чисто модуль реализующий этот функционал, хард, так сказать, кодед. Но ведь это же ненормально, хоть мне пусть на эту тему гики сцут в вочи.
no subject
Date: 2009-11-04 12:17 am (UTC)Там ООП. Наследуйся, переопределяй функции. Модель qtшная очень минималистично выражается через виртуальные методы (шесть виртуальных + десяток ролей досконально описывают все возможные модели, не только таблицы).
no subject
Date: 2009-11-04 05:35 am (UTC)no subject
Date: 2009-11-04 12:52 pm (UTC)Я конкретно про Qt высказывался, и средства контроля изменчивости в ней.
no subject
Date: 2009-11-04 01:05 pm (UTC)А вот библиотека его и контролы типа гридов - какой-то индусский ад, в плане архитектуры.
Насчет qt - надо пробовать, не видел.
no subject
Date: 2009-11-04 01:07 pm (UTC)Ясно. Не ел, но осуждаю, ага.
no subject
Date: 2009-11-04 07:36 am (UTC)А если рыть дальше и думать в сторону, что мне надо рисовать не одну таблицу вручную, то придется все равно делать механизм, с теми же пропертями, которы бы реализовывал подстройку модели в зависимости от каких-то метаданных в каждом случае.
no subject
Date: 2009-11-04 12:48 pm (UTC)В студию пример, который "делать дорого".
Проперти в qt есть, если что.
no subject
Date: 2009-11-04 01:06 pm (UTC)Допустим, есть проект, в нем три десятка отображаемых таблиц, под каждой из которых будет своя модель.
У меня есть под это какие-то метаданные, как должна выглядеть таблица.
И есть метод. как я могу эти таблицы рисовать в qt - а именно вариацией на тему перекрытия, допустим, QSqlQueryModel::data, расписывая там все внутри по ролям.
То есть все равно нужно создавать реализацию для этого дела, обобщенную, чтобы я мог из метаданных загрузить вид таблицы в зависимости от случая, эта моя перекрытая модель бы это дело рассосала и показала бы мне таблицу как положено.
А речь о том, что можно было бы сделать для 99% случаев такой функционал внутри модели, ну или обозвать ее там пусть QSqlQueryModelMostUsed, и для подавляющей массы случаев этого бы хватило выше крыши.
Или я не понял твоего вопроса? :)
ЗЫ проперти qt тут ни при чем
no subject
Date: 2009-11-04 01:09 pm (UTC)Нахера ты вручную делаешь модели для таблиц?
Бери QSqlMode, наворачивай поверх QSortFilterProxy - и получай profit.
no subject
Date: 2009-11-04 01:16 pm (UTC)В какой последовательности ты такие типовые задачи решаешь?
no subject
Date: 2009-11-04 08:08 pm (UTC)Капшены:
http://doc.trolltech.com/4.5/qsqltablemodel.html
QSqlTableModel *model = new QSqlTableModel;
//...
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
Нужно вечно задавать цвет и шрифт?
Настрой стиль на application глобально.
Нужно лишь для некоторых?
Ищи в документацию в QWidget setBackgroundRole/setForegroundRole, либо пронаследуйся от QSqlTableModel один раз, определи всё по рялом, вытащи нужные тебе параметры в Property, и юзай свой один раз написанный класс для моделей.
Мне что, рассказывать ребе как на базе библиотеки построить четыре штуки удобных и нужных именно им контролов?
no subject
Date: 2009-11-04 08:48 pm (UTC)Вот именно про это я и писал и именно так и делал :)
Речь шла не об этом. А о том, что на мою точку зрения, имея за горами 2009 год и вагон чужого опыта в лице MS-Borland можно было бы придумать "в базовой поставке" средства поприятнее. Например, в упомянутых продуктах есть почти что интерактивные средства дизайна таблиц, сопоставление типа "имя поля из базы - колонка - параметры". Почему такое хотя бы было не повторить кроме как по причинам религиозным - я ума не приложу, то что это неудобно - не поверю, ибо скорость опять таки разработки увеличивается в разы. Да, я понимаю, что
Короче, философия :)
no subject
Date: 2009-11-04 08:54 pm (UTC)Qt - библиотека общего назначения, она достаточно гибка и расширяема.
Вас не устраивает, что нужно написать порядка десятка кастомных контролов? Это вздор.
Нету времени? Ребята, у меня есть предложение - я вам напишу и доработаю эти контролы по вашим требованиям по цене 10 баксов в час (стандартная такса). Деньги за результат, а не за время. Идёт?
no subject
Date: 2009-11-04 09:04 pm (UTC)no subject
Date: 2009-11-04 09:06 pm (UTC)Вам попиздеть как всё хуёво, или работать надо? Брюзжать и я могу.
А то ишь, не нравится им что нету виджета "бухгалтерский отчёт для БР".
no subject
Date: 2009-11-04 01:09 pm (UTC)no subject
Date: 2009-11-03 12:22 pm (UTC)Проблема ли это? РФ-РБ переползла с технологий и потребления СССР на общеевропейское, за каких-то 10 считай лет. Очень много старого выбросили и заменили новым. И ничего. Рутина.
> Не так работают дата-гриды, не та модель работы с данными
Это есть. Но в целом тот Дельфи паттерн Table Gateway и был уродлив.
Сдох -- и хорошо.
> что использовать в качестве генератора отчетов
Ну даёте. Аксесс, конечно! :)
У МС есть крайне мощный репорт сервер.
> что выбрать, чтобы перейти с наименьшим напрягом, чтобы были библиотеки, чтобы потом было где искать разработчиков, и чтобы это не остановило всю работу
В этой задаче хорошо бы подошли типа профсоюзов или профобъединений. Типа "союз пчеловодов нижней Саксонии". Ваша ниша узкая, и Вы похоже оторваны от коллег. А в других нишах всё проще, обычно есть типовые технологии.
Если считаете, что нет библиотек -- а как тогда зарубежные товарищи аналоги делают? Если технология реально устарела -- может и хрен с ним. Зачем RS232 если вовсю USB и bluetooth.
no subject
Date: 2009-11-03 12:32 pm (UTC)Access у клиентов может банально не быть. MSSQL с его репортинг сервисес тоже. Тут и так софт за собой тянет какую-то гору зависимостей, постоянно у клиентов то MDAC обновлять приходится, то дотнет, то iis перенастраивать.
Насчет типовых технологий - вот я тоже считаю, что они должны быть. А судя по комментариям - кто во что горазд.
А аналоги делаются просто. Самописанные библиотеки используются в основном. У нас в проекте есть железо с RS232, USB(HID), есть беспроводное с проприетарным приемником и протоколом, будет и блютуз вроде. Везде - только ручное написание, безальтернативно. "Никто такого больше не делает".
no subject
Date: 2009-11-04 02:21 pm (UTC)Думаю, мы говорим о разном. Я говорю о том, что доступ "под капотом" у датасета был через insert/post, было понятие "текущая запись". Это наследие DBF, в начале 90-х на нём и аналогах были написаны все "опердени". Уже в 1993, помнится, читал в компьютерных газетах стенания, что вот при переходе на Настоящие Сетевые БД С Настояшщим SQL всё это великолепие надо будет поломать. И вот, прошло всего лет 7, и всё поломали. )))
Вы говорите про design time -- да, реализовать банальный драг-н-дроп с кучей дельфийских фич из популярных никто не смог (хотя например в 2001 я лично писал веб-фреймворк на Ж2EE с хорошей интеграций ЖСП кода с неким сторажом -- да всё сдохло). Возможно, причина и в процессорах, тогда ява была медленная.
А сейчас как-то у народа в мозгах концепция поменялась, что надо именно наследоваться вместо параметризации. Времени убивается куча. Ради справедливости, в дельфях тоже была такая лажа, что если поля БД хочешь именованные как проперти, то... там довольно нетривиальное вуду.
> Access у клиентов может банально не быть.
Есть у них специально для этого рантайм система. Тянется готовый экзешник с ДЛЛ и МДБ файлом, ничего не надо ставить, просто копируешь файлы. Для защиты от разбора там есть фича с паролем разработчика и вообще правами.
У меня есть книга про адвансед программирование на аксессе (на рус.), так это мегатул вообще. Почти дельфи, только компонент мало.
> А судя по комментариям - кто во что горазд.
> Везде - только ручное написание, безальтернативно. "Никто такого больше не делает".
Думаю, Вы не там смотрите. Во-первых ЖЖ всё таки не для профессионалов. Во-вторых, насчёт уникальности как-то не верю. В ЕС-Китае-США техникой занимается куча людей.
no subject
Date: 2009-11-04 02:46 pm (UTC)Drag-drop дельфийский почти не нужен. Я им не пользуюсь уже лет 5, хотя половина кода на дельфи. Все что касается гридов и датасетов - генерится в рунтайме из метаданных базы.
no subject
Date: 2009-11-03 05:50 pm (UTC)Может речь о модели с курсорной обработкой данных?
no subject
Date: 2009-11-04 02:08 pm (UTC)no subject
Date: 2009-11-04 02:14 pm (UTC)no subject
Date: 2009-11-03 02:55 pm (UTC)Существовать будет долго, разработчики никуда не денутся...
no subject
Date: 2009-11-03 11:49 pm (UTC)Для создания шаблонов отчётов кошерно пользовать Word, для него (2007-го) написать плагинчик который даёт доступ к вашим внутреним элементам, которые можно вставлять в документ, а потом лёгкое движение руки, и шаблон превращается в готовый отчёт ;)
no subject
Date: 2009-11-04 01:18 pm (UTC)Кто Вам сказал, что вообще у клиента будет ворд? :)
Вообще имхо завязка в коммерческой системе на коммерческие продукты третьих фирм которые "обычно стоят" - это неправильно.
no subject
Date: 2009-11-04 01:22 pm (UTC)no subject
Date: 2009-11-04 01:35 pm (UTC)