web-dev-qa-db-ja.com

Qt / C ++からC#/ WPFへの移行-生産性の向上?

C++/Qtで記述された小さなデスクトップアプリケーション(約15000行のコードなのでそれほど大きくありません)を作成しました。これは非営利であり、単なる趣味のプロジェクトであり、私は自分の自由時間をコーディングしています。

アプリケーションが大きくなると、C++を書くのがますます面倒になり、新しい機能を追加するのに時間がかかります。

  • メモリを手動で管理するのは特に難しいと思います。スマートポインターを使用しても、オブジェクトを効率的に渡す方法について、所有権についてよく考えなければなりません。
  • リアルタイムのコンパイルがないため、コンパイル時間は遅くなります
  • 現代のC++構文でさえ、しばしばいくぶん不可解であり、型注釈でいっぱいであり、書くのはやや退屈です
  • 私のアプリケーションはいくつかのカスタムQtウィジェットに基づいているため、デザイナーの使用が困難です。その結果、単純なダイアログとインターフェースをコードで手動で作成するのに多くの時間が費やされます。

クロスプラットフォームは興味深いですが、私のユーザーの大部分はとにかくWindowsを使用しています。

これらはすべて、C#/ WPFへの移行を考えさせる理由です。

一方で、「最初から書き直す必要はない」という強いミーム(Joel Spoeskyの有名なブログエントリを参照)があり、「草は常に緑の向こう側にいる」症候群に悩まされるのではないかと心配しています。

C++/QtからC#/ WPFに変換されたプロジェクトでの経験は何ですか?純粋なC#を変換して記述した後、生産性の向上として認識されたものはどれですか。書き換えプロセスはどれほど退屈でしたか? Qtのシグナル/スロット思考からMVVMアプローチに移行することは難しいですか? WPFの学習曲線はどのようなものですか?

6
ndbd

私はC++ UI開発、特にQtでの経験が豊富ですが、wxWidgetsやraw win32も含まれています。また、WPFでいくつかのC#UI開発を行いました。

私は、C#/ WPFよりも、私が使用したUIテクノロジ(raw win32を含む)を文字通り強くお勧めします。私の経験では、それは十分に文書化されておらず、信じられないほど遅く、すべての抽象化はふるいのようにリークします。

「動作がわずかに異なる標準コントロールのバリアントを作成する」などの問題に対する解決策や、XAML宣言の問題をデバッグする方法を探してみてください。何を期待するべきかについていくつかの考えを与えるべきです。

私は個人的にはWinFormsの経験はありませんが、他の人がWinFormsを提案するのを見てきました。 C++を使いたくない場合は、試してみてください。

6
James Picone

私はQTの経験はありませんが、C++とMFCでの作業に10年以上費やしました。 C#とWPFを使用して、ほぼ10年になります。

C++/MFCよりもC#/ WPFの方が生産性がはるかに高いことがわかりました。

言語として、私はC#での生産性がC++での生産性よりもはるかに高くなっています。これの一部は、ほとんどの場合、メモリ管理について心配する必要がないことです(他のことについて考えるための頭脳力を解放します)。その一部は、C#構文がC++よりもはるかに簡潔で、いくつかの本当に素晴らしい機能を備えているという事実です(ただし、C++は新しい仕様で改善されています)。

WPFは、私がこれまでに作業した中で最も生産的なUIフレームワークです。 XAMLは(HTMLのように)宣言型ですが、(C#のように)タイプセーフです。私の意見では、これはユーザーインターフェースを作成するための両方の世界で最高です。データバインディングは、UIコントロールを操作するデータに簡単にリンクできる非常に強力な機能です。

3
17 of 26

C#、WPF、MVVM、Entity Frameworkを学び、VB6、VBA、SQLなどで何年もプログラミングした後、おそらくいくつかのテクノロジーをゼロから学びました。

それは急な学習曲線であり、長い時間を要しました。しかし、私がそれを行ってうれしく思います。C#とWPFは、特にMVVMと組み合わせて素晴らしいテクノロジーであるためです。

何年も前に、使いやすいGUIで多くの機能を備えた複数の画面でオーディオファイルとビデオファイルを再生するプログラムをVB6で作成しました。今、私は上記のテクノロジーを使って、似たようなものを一から開発しました。時間はかかりますが、やるのは楽しいし、アニメーションなどの新しいオプションをすべて見るのも楽しいです。

私のアドバイス:お金を稼ぐために「これだけ」を行うと、新しいテクノロジーの学習に費やすすべての時間は決して支払われないでしょう。それをすべて学ぶのは大変な作業であり、それを効率的に使用するためには、さらに多くの作業が必要です(今のところです)。

プログラミングが好きで、新しいテクノロジーを使うとどれほど簡単になるかを知りたい場合は、プログラムを最初から作成することをお勧めします。しかし、書く準備をして、おそらくそれを書き直してください。私の場合、C#とWPFを使用してプログラムを開始しましたが、しばらくしてそれが困難になり、MVVMについて学び、その概念に従ってすべてを変更しました。長い時間かかりました。私はまだ(主に限られた時間のために)終了していませんが、プログラミングが好きで、自分の進歩を見るのが好きです。私はそれが私にかかったすべての時間のために充電することはできませんが、私はそれを楽しんでいます、そしてそれは私に将来のためのより多くの選択肢を与えます。これが私がやる理由です。

1
Edgar