web-dev-qa-db-fra.com

Passer de Qt / C ++ à C # / WPF - Gain de productivité?

J'ai créé une petite application de bureau (environ 15 000 lignes de code, donc pas si grande) écrite en C++/Qt. Ce n'est pas commercial, c'est juste un projet de loisir et je code sur mon temps libre.

Plus l'application est volumineuse, je trouve de plus en plus fastidieux d'écrire en C++, et l'ajout de nouvelles fonctionnalités prend beaucoup de temps.

  • Je trouve particulièrement difficile de gérer manuellement la mémoire - même avec des pointeurs intelligents, je dois souvent penser à la propriété, à la façon de passer efficacement les objets.
  • Les temps de compilation sont lents, car il n'y a pas de compilation en temps réel
  • Même la syntaxe C++ moderne est souvent quelque peu cryptique et pleine d'annotations de type et quelque peu fastidieuse à écrire
  • Mon application est basée sur plusieurs widgets Qt personnalisés, ce qui rend l'utilisation du Designer difficile. Cela entraîne beaucoup de temps passé à créer manuellement des boîtes de dialogue et des interfaces simples par code.

Cross-Platform est intéressant, mais la majorité de mes utilisateurs sont quand même sous Windows.

Ce sont toutes des raisons qui me font penser à passer à C #/WPF.

D'un autre côté, il y a le mème fort "Nevery Rewrite from scratch" (cf. la célèbre entrée de blog de Joel Spoesky), et je crains de souffrir du syndrome "l'herbe est toujours plus verte de l'autre côté".

Quelle est votre expérience avec les projets convertis de C++/Qt en C #/WPF? Quel gain de productivité perçu avez-vous réalisé après avoir converti et écrit du C # pur? À quel point le processus de réécriture était-il fastidieux? Est-il difficile de passer de la réflexion signal/slot de Qt à l'approche MVVM? À quoi ressemble la courbe d'apprentissage pour WPF?

6
ndbd

J'ai une expérience significative avec le développement d'interfaces utilisateur C++, principalement en Qt mais également avec wxWidgets et win32 brut. J'ai également fait du développement d'interface utilisateur C # dans WPF.

Je recommanderais fortement littéralement l'une des technologies d'interface utilisateur que j'ai utilisées - y compris win32 brut - sur C #/WPF. D'après mon expérience, il est mal documenté, incroyablement lent et toutes ses abstractions fuient comme un tamis.

Essayez de chercher des solutions aux problèmes tels que "Créer une variante d'un contrôle standard avec un comportement légèrement différent" ou comment déboguer les problèmes dans les déclarations XAML. Devrait vous donner une idée de ce à quoi vous attendre.

Je n'ai personnellement aucune expérience avec WinForms, mais j'ai vu des gens le suggérer comme alternative; essayez peut-être cela si vous ne voulez plus utiliser C++.

6
James Picone

Je n'ai aucune expérience avec QT, mais j'ai passé plus d'une décennie à travailler avec C++ et MFC. J'ai maintenant presque une décennie de travail avec C # et WPF.

Je trouve que je suis un ordre de grandeur plus productif en C #/WPF que je ne l'ai jamais été en C++/MFC.

En tant que langage, je me trouve être beaucoup plus productif en C # que je ne l'ai jamais été en C++. Une partie de cela n'est pas d'avoir à se soucier de la gestion de la mémoire la plupart du temps (libère votre cerveau pour penser à d'autres choses). Cela tient en partie au fait que la syntaxe C # est beaucoup plus propre que C++ et possède des fonctionnalités vraiment agréables (bien que C++ s'améliore avec les nouvelles spécifications).

WPF est de loin le cadre d'interface utilisateur le plus productif avec lequel j'ai jamais travaillé. XAML est déclaratif (comme HTML) mais sécurisé (comme C #). À mon avis, c'est le meilleur des deux mondes pour créer des interfaces utilisateur. La liaison de données est une fonctionnalité très puissante qui facilite la liaison des contrôles d'interface utilisateur aux données qu'ils manipulent.

3
17 of 26

J'ai appris C #, WPF, MVVM, Entity Framework et probablement d'autres technologies à partir de zéro après avoir programmé pendant des années avec VB6, VBA, SQL et autres.

Ce fut une courbe d'apprentissage abrupte et cela a pris beaucoup de temps. Mais je suis heureux de l'avoir fait. Parce que C # et WPF sont des technologies merveilleuses, spécialement combinées avec MVVM.

Il y a plusieurs années, j'ai écrit un programme en VB6 pour lire des fichiers audio et vidéo sur plusieurs écrans avec une interface graphique facile à utiliser mais toujours beaucoup de fonctionnalités. Maintenant, j'ai développé quelque chose de similaire mais meilleur à partir de zéro avec les technologies ci-dessus. Cela prend du temps mais c'est amusant de le faire et c'est amusant de voir toutes les nouvelles options avec des animations, etc.

Mon conseil: si vous faites cela "uniquement" pour gagner de l'argent, il est probable que toutes les heures que vous passeriez à apprendre les nouvelles technologies ne seront jamais payées. C'est beaucoup de travail pour tout apprendre et beaucoup plus de travail pour l'utiliser efficacement (c'est là que je suis en ce moment).

Si vous aimez la programmation et si vous aimez voir comment les choses fonctionnent plus facilement avec les nouvelles technologies, je vous recommande d'écrire votre programme à partir de zéro. Mais soyez prêt à l'écrire et peut-être à le réécrire. Dans mon cas, j'ai commencé avec le programme avec C # et WPF et quelque temps plus tard, c'est devenu difficile, puis j'ai appris à propos de MVVM et j'ai tout changé selon ce concept. Ça a pris du temps. Je n'ai pas encore fini (surtout à cause du temps limité) mais j'aime la programmation et j'aime voir mes progrès. Je ne pourrai jamais facturer tout le temps que cela m'a coûté, mais je l'apprécie et cela me donnera plus d'options pour l'avenir. Voilà pourquoi je le fais.

1
Edgar