Webの世界で立ち往生しているプログラマーから...
現在、デスクトップ アプリケーションの開発に使用されている、最も一般的なデスクトップ開発の「フレームワーク」は何ですか?
Windows と OS X の両方に対応するデスクトップ ソフトウェアを作成することは現実的ですか?
同じ基本コードを使用して、デスクトップ UI だけでなく部分的な Web UI を持つアプリケーションのビジネス/データ レイヤーを作成することは現実的ですか?
Webの世界で立ち往生しているプログラマーから...
現在、デスクトップ アプリケーションの開発に使用されている、最も一般的なデスクトップ開発の「フレームワーク」は何ですか?
Windows と OS X の両方に対応するデスクトップ ソフトウェアを作成することは現実的ですか?
同じ基本コードを使用して、デスクトップ UI だけでなく部分的な Web UI を持つアプリケーションのビジネス/データ レイヤーを作成することは現実的ですか?
はい。クロス プラットフォームの UI フレームワーク、AIR などで Java、Python/Ruby などを使用できます。
はい、現実的です。クライアント/サーバー モデルで構築すると、ほとんどのコードがデスクトップまたは Web UI モデルに適合します。
.NET ルートをたどると、Web アプリに Silverlight、バックエンドに .NET サーバー コード、さらには OS X 向けの開発を可能にする Mono を使用できます。
Java ルートを選択した場合、Java はブラウザー内で実行されます。ブラウザー用の小さなフラッシュのようなバージョンである JavaFX が間もなく登場します。ほぼすべての OS で動作し、バックエンドを問題なく処理できます。
Flex/AIR は、OS X、Windows、および Linux 用のデスクトップおよび Web ベースのアプリを開発するための優れた方法を提供しますが、バックエンド用に別の言語が必要になります。ただし、.NET、Java、PHP などはすべてバックエンドとして正常に動作します。
編集
MrJeepster のリクエストにより、AIR フロントエンドと .NET バックエンドのインターフェースの詳細を以下に示します。
AIR を .NET バックエンドに接続するには、DIY とリモートの 2 つの方法があります。
DIY の方法では、独自の (おそらく XML) データ形式を定義し、低レベルの HTTP 要求オブジェクトを使用して HTTP サーバーと通信したり、低レベルのソケット クラスを使用して他のサーバーと通信したりします。
素敵な人々が無料のリモーティング パッケージの選択を書いているので、リモーティングの方法はすべて一緒に簡単です:
http://www.adobe.com/devnet/flashremoting/articles/intro_flremoting_net.html
http://www.themidnightcoders.com/flashorb/gettingStarted.htm
http://www.fluorinefx.com/
リモート処理には、クライアントとサーバー間でのオブジェクトの共有が含まれます。したがって、AIR クライアントで何らかのオブジェクトを作成し、リモート フレームワークを取得してシリアル化し、サーバーに転送して、.NET オブジェクトに逆シリアル化します。次に、サーバーはそれを処理し、それまたは新しいオブジェクトを同じルートを介して再度送信します。
クロス プラットフォームのデスクトップ開発は可能ですが、簡単ではありません。少なくとも、サポートされているすべてのプラットフォームでテストする必要があります。また、困難な妥協をしなければなりません。ソフトウェアをすべてのプラットフォームでまったく同じように見えるようにする (したがって、どこでもネイティブ アプリのように見えないようにする) か、それともネイティブ コントロールを使用し、さまざまなプラットフォームでさまざまな調整などを処理しますか? 見た目以外に、どのような振る舞いをしますか? たとえば、UNIX ソフトウェアは大文字と小文字を区別して並べ替えますが、Windows ソフトウェアはそうではありません。両方のプラットフォームで 1 つの並べ替え順序を選択しますか、それともプラットフォームごとに異なる並べ替えを行いますか?
.NET とmonoを使用することは適切な選択です。
クロス プラットフォームをお探しの場合は、Qt をお勧めします。数年前にこの辺りで利用しました。ただし、ライセンスは開発者ごとであり、高価です(少なくとも当時はそうでした)。
もちろん、Web サービスを利用することもできます。
Qt (C++ または python のいずれか) は、mac/win/linux 間で完全に移植可能です。QtWebKit も含まれているため、実際の最新のブラウザーをアプリに簡単に組み込むことができます。
私はREALbasicを使用して、MacOSXとWindowsの両方に対応するさまざまなデスクトップアプリケーションを作成しています。それは非常にうまく機能します。
ただし、デスクトップ/WebUIと共有するための個別のレイヤーを作成するのには適していません。
私たちは Java (Swing) を使用して小さなクロス プラットフォーム アプリを構築していますが、これは非常に優れています。少なくともこれまでのところ。:D
Java を使用して、多くの多層クロスプラットフォーム アプリを構築してきました。デスクトップでは、Swing は非常にうまく機能しました。