Russian Qt Forum
Ноябрь 23, 2024, 10:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Стоит ли переводить код из старых WinAPI-программ "потихонечку" в Qt  (Прочитано 12885 раз)
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« : Декабрь 18, 2018, 02:43 »

 Наверное, правильный ответ - "Да крутись оно все конем!"
 Но идеал наталкивается на реальность. А реальность в том, что никакого ТЗ нет и быть не может. Если, конечно, не считать за ТЗ уже с грехом пополам работающую программу, которую надо сделать "еще лучше".
 Я знаю про метафору, что вносить изменения в уже распространяемую программу то же, что делать внутриполостную операцию на бегущем человеке. Но поверьте, другого выхода у нас не было. Или я его не смог найти. Моя вина.
 Но что случилось, то случилось. Как поет нестареющая звезда нашей эстрады, "фарш невозможно провернуть назад".
 Короче, использовать работающую программу как образец для подражания совершенно невозможно. Там тьма решений, вызванных просто моей неумелостью, заплаточностью сиюминутных потребностей и просто неправильным интерфейсом.
 То есть интерфейс надо менять кардинально. А вот этого-то мой консервативный и многоголовый заказчик не хочет.
 И мне остается только исподволь предлагать ему другой. Оставляя ему возможность "жить по-старому". И игнорировать все его хотелки к старому варианту. Фактически прекратить поддержку старого проекта за исключением явных моих ляпов. Которые, увы! есть и будут.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Декабрь 18, 2018, 08:24 »

Хорошо такое читать перед сном, сразу вырубает
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Декабрь 18, 2018, 12:40 »

Краткий ответ: НЕТ, такое решение в корне ошибочно. Подробности

Название топика хорошее, но содержание стартового поста уж чересчур эмоционально. Право, не стоит посыпать голову пеплом типа "Ах, не предусмотрел(и)! Моя вина!" и.т.п. Ситуевина совершенно стандартная: есть старое (древнее, замшелое и.т.п.) но работающее приложение, вот надо перевести его на Qt. Конечно задача большая и непростая, такие не каждый день возникают, но это отнюдь не редкость.

А реальность в том, что никакого ТЗ нет и быть не может. Если, конечно, не считать за ТЗ уже с грехом пополам работающую программу, которую надо сделать "еще лучше".
Ага, и документации нет (в лучшем случае огрызки). И содержание "W-приложения" Вы хорошо себе представляете процентов так на 30% (если не меньше, дальше смутно). Это нормально, в такой ситуации я был. Вот некоторые ошибки которые я сделал (хотя чужой опыт редко учит)

1) Не пытайтесь нанять "Qt спеца". Да, есть немало людей хорошо владеющих Qt, но здесь не это  главное - гораздо важнее знать/понимать портируемое приложение, а вот этим (кроме Вас) никто заниматься не будет.

2) Не "хватайтесь за окно". Увидев старенькую часть UI в голову моментально приходят мысли типа "Да на Qt это же как 2 пальца об асфальт! А можно и намного лучше - и легко!". Но беда в том что Qt-приложения-то у Вас нет и куда приткнуть новое окно - хз. А "сборная солянка" быстро задолбает.

3) "Та ну его нафиг! Возиться с этим калом мамонта! Переписать все с нуля - и все дела".  Именно такие резвые советы даются чаще всего - ведь дающий их сам-то в W-приложение не полезет. Здесь уместно вспомнить библию (не ручаюсь за точность цитаты)
Цитировать
Для достаточно большого приложения есть только один старт - меньшее (читай - предыдущее) приложение которое уже работает
Святая правда, повторить весь имеющийся ф-ционал "с нуля" возможно только если он "достаточно мал", тогда можно просто портировать "в лоб". Но чаще эта радость недоступна.

Так, ну пока хватит, надо и другим дать высказаться.
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #3 : Декабрь 18, 2018, 13:31 »

Цитировать
Не пытайтесь нанять "Qt спеца".
Да. Для меня это очевидно.

Вообще, у меня такое ощущение, что вы мои проблемы очень хорошо понимаете. Видно, что и сами были в похожей ситуации. Ну и как? Выкарабкались?Улыбающийся

Вопрос не в тему. Как вам удается цитировать часть поста с указанием авторства? У меня получается или цитирование всего поста (кнопка "цитировать") или я просто копипастю эту часть и окружаю ее "квотами".
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #4 : Декабрь 18, 2018, 13:33 »

Короче, использовать работающую программу как образец для подражания совершенно невозможно. Там тьма решений, вызванных просто моей неумелостью, заплаточностью сиюминутных потребностей и просто неправильным интерфейсом.
 То есть интерфейс надо менять кардинально. А вот этого-то мой консервативный и многоголовый заказчик не хочет.
 И мне остается только исподволь предлагать ему другой. Оставляя ему возможность "жить по-старому". И игнорировать все его хотелки к старому варианту. Фактически прекратить поддержку старого проекта за исключением явных моих ляпов. Которые, увы! есть и будут.

Вы сразу и ответили на свой вопрос Улыбающийся.

Можно поинтересоваться: в каком году зародилась эта WinAPI-программа?

И для дальнейшего размышления: почему именно в Qt? Не появится ли через 3-5 лет тема: "Стоит ли переводить код из старых Qt-программ "потихонечку" в SomeOtherFramework"? Улыбающийся
Записан

Пока сам не сделаешь...
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Декабрь 18, 2018, 13:42 »

Приходилось заниматься подобным портированием.
Как правильно говорит Igors, лучшее и правильное решение будет - "переписать всё".
При этом выправляя (или меняя) архитектуру и концепты. Была мажорная версия 5.X.Y (без Qt), станет 6.0.0 (с Qt).

В принципе, при наличии (бес)конечности времени и желания, я бы начинал с MVP - Minimum Viable Product.
Т.е. решение, содержащее поначалу минимум самого нужного функционала, но с правильной архитектурой и идеями.
Скорее всего, у Вас есть такой функционал в старом приложении, но криво сделанный.
Сделайте ровно и на Qt. Тестируйте, показывайте заказчику. Параллельно понемногу доращивайте до 6.1.0, 6.2.0 и т.д.

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

Как-то так.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #6 : Декабрь 18, 2018, 13:47 »

Цитировать
в каком году зародилась эта WinAPI-программа?
Конец прошлого тысячелетия. 1997. А до этого еще был ДОС-вариант:)
Цитировать
почему именно в Qt?
Я не гонюсь за модой. Просто понравилось. Пришлось по руке. Чего не скажу о том же Бюльдере.
Вообще, к использования новых инструментов прихожу гигантскими скачками. Так что вряд ли через 3-5 лет соблазнюсь неким SomeOtherFramework...Улыбающийся
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #7 : Декабрь 18, 2018, 13:56 »

Конец прошлого тысячелетия. 1997. А до этого еще был ДОС-вариант:)

Тогда понятно и объяснимо Улыбающийся.

Я не гонюсь за модой. Просто понравилось. Пришлось по руке. Чего не скажу о том же Бюльдере.
Вообще, к использования новых инструментов прихожу гигантскими скачками. Так что вряд ли через 3-5 лет соблазнюсь неким SomeOtherFramework...Улыбающийся

Дело не в моде. Выше Racheengel говорил о выправлении архитектуры. Я к тому, что не надо сильно завязываться на Qt, как сейчас завязано на WinAPI. Если есть возможность, то стоит рассматривать Qt как "один из видов GUI", который впоследствии можно заменить на другой, не переписывая опять всё приложение с нуля.
Записан

Пока сам не сделаешь...
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #8 : Декабрь 18, 2018, 13:59 »

Цитировать
Сделайте ровно и на Qt. Тестируйте, показывайте заказчику.
Делаю. Показываю. Заказчик стоит в позиции "Чем бы дитя не тешилось..." Но эта тропинка протаптывается.
Цитировать
плагины Вам в руки. Пишите длл с нужным функционалом и гуём
А вот это и впрямь дельный совет. Надо попробывать. Беда в том, что плагинами никогда не занимался. Но думаю, это-то освоить можно. Какие-то вопросы смутно и несформулированно видятся. Но до них, конечно, нужно еще дойти...
Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #9 : Декабрь 18, 2018, 14:22 »

Цитировать
рассматривать Qt как "один из видов GUI", который впоследствии можно заменить на другой,
Вы говорите о разделение движка и представления? Конечно! В проекте есть довольно весомая вычислительная часть. Написанная на чистом Си. И она остается почти без изменений. И переходит из проекта в проект. И даже "подкармливает" побочные проекты.
Скажу больше. В воздухе давно уже носится идея сделать из десктопного веб-приложение. И там вся математика ровно та же. Только перетранслированная на ОС хостера. Что получилось без особых проблем. А все остальное - фактически это новое гуи. И вот тут попытка привлечения "спецов по сайтостроению" закончилась полным крахом. Легче сделать самому. Что и было начато. Но... Тут меня стало уже немножко не хватать... Хотя в этом направлении у меня развязаны руки. Это должно позиционироваться как новый проект с похожим функционалом, и мы не обязаны повторять всех неудачных решение исходного
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #10 : Декабрь 18, 2018, 15:38 »

По теме нашел почитать "Эффективная работа с унаследованным кодом" и перечитать "Мифический человеко-месяц" )
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Декабрь 18, 2018, 16:17 »

Вопрос не в тему. Как вам удается цитировать часть поста с указанием авторства? У меня получается или цитирование всего поста (кнопка "цитировать") или я просто копипастю эту часть и окружаю ее "квотами".
Цитирую все и вырезаю ненужное  Улыбающийся

Делаю. Показываю. Заказчик стоит в позиции "Чем бы дитя не тешилось..." Но эта тропинка протаптывается.
Ой смотрите. Если заказчик не понимает что портинг занимает по меньшей мере месяцы - не стоит и начинать.

А вот это и впрямь дельный совет. Надо попробывать. Беда в том, что плагинами никогда не занимался. Но думаю, это-то освоить можно. Какие-то вопросы смутно и несформулированно видятся. Но до них, конечно, нужно еще дойти...
Похоже этой "кусочной" участи никому не избежать, что бы ни советовали Улыбающийся Она ведь так заманчива! Ну попробуйте, главное почувствовать когда соскочить

Видно, что и сами были в похожей ситуации. Ну и как? Выкарабкались?Улыбающийся
Правду сказать - с большим трудом, но удалось нащупать верный путь. Нужно сначала написать эмулятор старого фреймворка на Qt, "поднять" все текущее UI, пусть оно будет точно таким же (в смысле ничего нового),  но будет Qt-приложением. А потом уже расправляться с конкретными окнами и контролами, там уже дело пойдет веселее, а главное - над Вами "не капает", не висит груз перевести ВСЕ", что-то работает по-старинке - ну и ладно. Кстати если у Вас Borland-OWL, то не исключено что такой эмулятор уже кто-то и запостил (не один же я такой умный  Улыбающийся)
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #12 : Декабрь 18, 2018, 18:13 »

Вы говорите о разделение движка и представления? Конечно! В проекте есть довольно весомая вычислительная часть. Написанная на чистом Си. И она остается почти без изменений. И переходит из проекта в проект. И даже "подкармливает" побочные проекты.
Ну раз основная вычислительная часть уже есть и не завязана на GUI, то лучше "с нуля" проектировать и реализовывать новый GUI на Qt.
Если вы углубитесь в Win-реализацию, то просто потеряете кучу времени. Представьте, что вы хотите получить, разбейте это на этапы по важности и реализуйте.
Потратьте время и хорошо продумайте архитектуру, что бы GUI сильно не пересекался с бизнес-логикой, тогда в дальнейшем смена GUI будет проходить безболезненней. Неплохо сразу продумать систему плагинов, расширять такую систему будет проще.
« Последнее редактирование: Декабрь 18, 2018, 18:20 от Old » Записан
Day
Частый гость
***
Offline Offline

Сообщений: 290


Просмотр профиля
« Ответ #13 : Декабрь 18, 2018, 21:37 »

Цитировать
Если заказчик не понимает
Да понимает он все! Слава Богу, не первый год работаем!
Цитировать
главное почувствовать когда соскочить
Золотые ваши слова!
Цитировать
перечитать "Мифический человеко-месяц" )
Читали еще в прошлом тысячетелетии, и с большим удовольствием. Особенно понравился слоган о 9-ти женщинах, пытающихся выносить ребенка за месяц.Веселый
В те времена это было откровением. Теперь можно только снисходительно посмеиваться. Особенно чудна идея о "Хирургической Бригаде". Но наверное, там есть еще много чуднОго. И вправду перечитать, что ли?Улыбающийся
Цитировать
написать эмулятор старого фреймворка на Qt,
А вот этого мне, боюсь, не осилить. Ибо к этому старому испытываю такое глубокое и стойкое отвращение, что еще и эмулировать его...Улыбающийся
Цитировать
Потратьте время ...
Да, тот ресурс у нас правда неограничен...Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Декабрь 19, 2018, 11:15 »

.. лучшее и правильное решение будет - "переписать всё".
При этом выправляя (или меняя) архитектуру и концепты.
Ну это "конечная цель", но как ее достигнуть? Давайте создадим новый Qt проект, нарисуем MainWindow и будем переписывать туда старые окна под Qt? Так, что ли? Если так, то:

- если говорим "портирование", то тем самым утверждаем что "текущий ф-ционал остается неизменным". Сначала должно просто "ходить на Qt", пусть косо, криво, но хоть как-то ходить, т.е. Qt-приложение должно стартовать и окна открываться. Это уже успех. Только после этого можно пересматривать архитектуру и концепты. А попытка проскочить сразу - просто авантюра

- вот было старое приложение, которое постоянно (и наверное заслуженно) ругали. Но теперь его НЕТ. И, хуже того, когда оно опять будет (хотя бы со старым ф-ционалом) - неизвестно, ответить заказчику нечего. И в таком "подвешенном" состоянии будете находиться месяц за месяцем. Вряд ли хорошие новые концепты придут в голову под таким тяжелым прессом. Зачем же было загонять себя в такое положение?

Конечно все эти рассуждения справедливы лишь для "достаточно большого" UI. Если "в лоб" проходит, то и думать нечего, делать в лоб - да и все.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.067 секунд. Запросов: 23.