2008-08-28 20 views
2

私はこの質問が最初に思われるように広がっていないことを願っています。私は私のソフトウェアアプリケーションを設計中です<sarcasm>voluminous</sarcasm>空き時間。私はそれがクロスプラットフォームとモジュラーの両方であることを願っています。この時点では、私はまだ計画段階にあるので、実際にはどの言語やツールセットを選ぶことができます。モジュール性とプラットフォーム独立性の両方に最適なアプローチは何ですか?

目標(モジュール性、プラットフォーム不可知論)の両方を達成するための非常に多くの方法が一見があるので、これは、物事は難しくなく、容易になります。

私の基本的な前提は、セキュリティ、データストレージ、オペレーティングシステムとのやりとり、設定はすべて "コンテナ"アプリケーションで処理されることですが、他の機能のほとんどはプラグインモジュールを通じて提供されます。私がそれを高いレベルで表現しなければならない場合(それは私のアイデアを完全に譲り渡さずに)、同じ目的に捧げられた多くの異なる仕事をすることができる単一のアプリケーションになるでしょう(異種のことがたくさんありますが、データは相互作用し、高可用性が必要です)。

これは新しい考えではなく、特にエキゾチックではありません。しかし、私はそれをする方法はあまりありません(私はたくさんの方法を考えることができます)が、どの方法が最善であるかにかかわっています。

は例えば、私は、Eclipseは事実上、私が説明しています何を体現していることを知っているが、私は必要なもののためには大きすぎると遅いことが、私は、一般的にJavaアプリケーションを見つける(とEclipseも例外ではありません)。 (優れた言語です!)のPythonとRubyを書い同上のデスクトップアプリ

私はネイティブexectablesなど、さまざまなプラットフォーム用のコードベースを再コンパイルする気にしません。しかし、CとC++には独自の問題があります。

C#開発者として、私はマネージコードを優先しています。しかし、私はMonoで売られていませんが、(確信が持てます)。

共有するアイデアや経験、特定のお気に入りのフレームワークを持っている人はいますか?

答えて

1

のいずれかでのwxWidgetsになります.NETはCAB(コンポジットアプリケーションブロック)とWPF用コンポジットアプリケーションのガイダンスがあるアプリのために。両方とも主に、IOCフレームワーク、MVCベースクラス、緩やかに結合されたイベントブローカー、モジュールやその他のものの動的ロードを備えた、プラグインアーキテクチャに似たコンポーネント間のモジュール化と緩やかな結合に焦点を当てた一連の設計パターンの実装です。

パターンインフラストラクチャは、.NET専用ではなく、探しているものだと思います。しかし、CABを一連のパターン実装として見ると、ほとんどすべての言語とプラットフォームに、個々のパターンのための既に組み込みのフレームワークやサードパーティのフレームワークがあることがわかります。

だから私のテイクは次のようになります。

  1. 研究(あなたが精通していない場合)、それらのデザインパターンの一部。 Patterns in the Composite Application Library
  2. を具体的なパターンの実装や製品を考慮せずに最初に達成したいと思うものに役立つと思われるパターンを考えると、というアーキテクチャを設計することができます。
  3. 「アーキテクチャ上の要件」がより明確に定義されたら、使用することを決定した言語のパターン/機能のそれぞれを達成するのに役立つ個々のフレームワークを探し、それに基づいて独自のアプリケーションフレームワークをまとめます。

私は、このプラットフォームをすべて独立させることが難しいことに同意します。 Javaのような成熟したプラットフォームに依存しない言語を選択するための他のソリューションについては、私は本当に考えることができません。

0

モノラルの経験が限られているので、私はかなり売れていると言うことができます。積極的な開発があり、最新の.Netテクノロジで仕様に引き上げるための多くの継続的な努力が奨励されています。既存の.Netスキルを複数のプラットフォームで使用できることは非常に便利です。私はPython + PyGTKでいくつかの基本的なタスクを達成しようとするとパフォーマンスに似た問題を抱えていました - おそらくそれらは正しい手で実行することができますが、パフォーマンスの90%を心配する必要はありません。

1

デスクトップアプリケーションまたはWebアプリケーションを計画していますか?この辺り

誰もがモノが大きいと考えているようだが、私はまだ私はワインは、素晴らしいアイディアだ場所にモノを等しくなり、業界の使用のための準備ができているとは思いません。それがうまくいくと、それがうまくいかないとき...あなたの運がうまくいっています。 Apacheのmod_monoは非常にglitchyで、正しく動作するのは難しいです。 http://wiki.eclipse.org/index.php/Rich_Client_Platform:あなたのデスクトップを目指す場合

は、何も日食RCP(リッチクライアントプラットフォーム)フレームワークに勝るものはありません。

Windows、linux、macをすべて同じコードでビルドすることができ、すべてのUIコンポーネントはOS固有のものです。そして、RCPはモジュール式で勝利を収めています。これは他に類を見ないプラグインアーキテクチャです(私が見たものから)

私は1.5年前にRCPで作業しましたが、 1のそれはニッチです。

あなたは全くのjavaに反対した場合、私は例を引用することはPythonやC++

だけ
1

プラットフォームに依存しないようにするには、パフォーマンスと開発の両面でトレードオフが必要です。 C++はJavaより高速かもしれませんが(これは議論の余地があるFWIWですが)、Javaを使用するとプラットフォームの独立性がさらに向上します。 PythonとRubyは同じボートに入っています。

.NETはJavaよりもはるかに高速です(どちらもVMの言語です)。しかし、.NETの大きな問題はプラットフォームの独立性です。モノは今のところ貴重な目標と驚くほど良い結果を持っていますが、常にはWindows上でMicrosoftと追いついて遊んでいます。その制限を受け入れることができるかもしれませんが、それでもJava、Python、Rubyと同じマルチプラットフォーム環境を持つことと同じではありません。また、.NET開発とサポートツールはWindowsに大きく偏っており、おそらく常にそうです。

IMO、あなたの最善の策は、Javaをターゲットにすることです。少なくとも、JVMを使うことです。 Java言語が気に入らなければ(そして、そうでないと推測しているC#devとして)、少なくともJython、JRuby、Scalaのようなオプションがあります。 JVMを使用すると、非常に優れたプラットフォームの独立性、優れたパフォーマンス、膨大な数のライブラリとサポートツールへのアクセスを得ることができます。ほとんどの場合、Javaライブラリ、ポート、実装が必要です。他のプラットフォームには同じ数のオプションがあるとは思いません。その柔軟性には本当の価値があります。

モジュール性については、どのようなプラットフォームを使用するよりも、ソフトウェアを構築する方法です。私はあなたのようなプラグインのアーキテクチャについてはあまりよく分かっていませんが、あなたが選ぶ近代的なプラットフォームであれば、それが可能になると思います。

1

Python開発を計画している場合、遅い部分のいくつかを最適化するために常にpyrexを使用できます。

0

デスクトップアプリケーションの場合、それをインタプリタ言語で記述し、wxWidgetsのようなクロスプラットフォームUIツールキットを使用すると、プラットフォームの独立性が向上します(他のモジュールを使用しないように注意する必要があります)トン、クロスプラットフォーム、config_path = "/home/$USER"のようなものをやっての代わりに、Pythonのos.pathモジュールのようなものを使用)

述べ、良いクロスプラットフォームアプリケーションを作るために、あなたが各プラットフォームで異なるいくつかのことを行う必要があります。

たとえば、OS Xはおそらく最も異なるでしょう - 環境設定は通常sです〜/ Library/Prefernces/as〜topledに渡されたUIは、一般的にフローティングウィンドウをベースにしており、単一のメニューバーが画面のトップにドッキングされています。

これはモジュール性が出てくるところだと思います。上の設定例では、UserConfigというクラスがあります。その中にOS固有のバージョンがあります。 Windowsは適切なApplication Dataフォルダまたはレジストリに設定データを保存します。 Mac OSのものは~/Library/Preferences/の.plistファイルを使い、unixのものは〜/ .dotファイルを使う。

関連する問題