モジュール性とプラットフォームの独立性の両方を実現する最善のアプローチは何でしょうか?

StackOverflow https://stackoverflow.com/questions/33510

  •  09-06-2019
  •  | 
  •  

質問

この質問が最初に思われるほど広範なものにならないことを願っています。私はソフトウェアアプリケーションを設計しています <sarcasm>ボリュームのある</sarcasm> 余暇。クロスプラットフォームとモジュラーの両方を実現したいと考えています。この時点ではまだ計画段階にあるため、実質的に任意の言語とツールセットを選択できます。

両方の目標 (モジュール性、プラットフォーム非依存性) を達成するには非常に多くの方法があるように見えるため、これは物事を簡単ではなく困難にします。

私の基本的な前提は、セキュリティ、データ ストレージ、オペレーティング システムとの対話、構成はすべて「コンテナ」アプリケーションによって処理されるべきであるということですが、他の機能のほとんどはプラグイン モジュールを通じて提供されます。これを(私のアイデアを完全に放棄することなく)大まかに説明しなければならないとしたら、それは多くの異なるジョブを実行できる単一のアプリケーションであり、すべてが同じ目的に特化しているということになります(やるべきことはたくさんありますが、すべてが同じです)データは相互作用し、可用性が高くなければなりません)。

これは新しいアイデアではなく、特に珍しいものでもありません。それでも、私はそれをどうやって行うかではなく(方法はたくさん考えられます)、どの方法が最適であるかについて悩んでいます。

たとえば、Eclipse が私が説明している内容を実際に具体化していることはわかっていますが、一般に Java アプリケーション (Eclipse も例外ではありません) は、私が必要とするものには大きすぎて遅すぎると感じます。Python と Ruby (優れた言語です!) で書かれたデスクトップ アプリも同様です。

さまざまなプラットフォームのコードベースをネイティブ実行可能ファイルとして再コンパイルすることは気にしません。ただし、C と C++ には独自の問題があります。

C# 開発者として、私はマネージ コードを好みます。しかし、私はまだMonoにまったく興味がありません(私は確信できました)。

共有できるアイデア/経験/特定のお気に入りのフレームワークがある人はいますか?

役に立ちましたか?

解決

例を挙げると、次のようになります。.NET アプリの場合は、CAB (Composite Application Block) と WPF の Composite Application Guide があります。どちらも主に、モジュール性とプラグイン アーキテクチャに似たコンポーネント間の疎結合に焦点を当てた、いくつかの設計パターンのセットの実装です。IOC フレームワーク、MVC 基本クラス、疎結合イベント ブローカー、モジュールの動的な読み込みなどがあります。

したがって、.NET に特化したものではなく、その種のパターン インフラストラクチャがあなたが見つけようとしているものだと思います。しかし、CAB をパターン実装のセットとして見ると、ほぼすべての言語とプラットフォームに、個々のパターンに対して何らかの形式の組み込みまたはサードパーティのフレームワークが既に組み込まれていることがわかります。

したがって、私の見解は次のようになります。

  1. (詳しくない場合は) これらのデザイン パターンのいくつかを勉強してください。WPF ドキュメントの CAB フレームワークを例として挙げることができます。 複合アプリケーション ライブラリのパターン
  2. 達成したいことに役立つと思われるパターンを考慮してアーキテクチャを設計します。 まず特定のパターンの実装や製品について考えずに.
  3. 「アーキテクチャ要件」をより具体的に定義したら、使用することを決定した言語のパターン/機能のそれぞれを実現するのに役立つ個別のフレームワークを探し、それらに基づいて独自のアプリケーション フレームワークを組み立てます。

難しいのは、このプラットフォームをすべて独立させることだと私も同意します。Java のような成熟したプラットフォームに依存しない言語を選択する他の解決策は本当に考えられません。

他のヒント

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

周囲の誰もが Mono が素晴らしいと考えているようですが、私はまだ Mono が業界で使用できる段階にあるとは思っていません。私は Mono をワインのようなものだと考えています。素晴らしいアイデアです。うまくいくときはうまくいきますが、うまくいかないときは運が悪いです。Apache の mod_mono は非常に不具合が多く、正しく実行するのが困難です。

デスクトップを目指すのであれば、Eclipse RCP (リッチ クライアント プラットフォーム) フレームワークに勝るものはありません。 http://wiki.eclipse.org/index.php/Rich_Client_Platform.

Windows、Linux、Mac をすべて同じコードで構築でき、すべての UI コンポーネントは OS にネイティブです。そして、RCP はモジュール性において間違いなく勝利しており、(私が見た限りでは) 比類のないプラグイン アーキテクチャを備えています。

私は RCP と 1 年半働いていますが、他に何が代替できるかわかりません。この分野ではナンバー 1 です。

Javaに完全に反対している場合は、PythonまたはC++のいずれかを使用してwxWidgetsを検討します

プラットフォームに依存しないようにしたい場合は、パフォーマンスと開発労力の間でトレードオフを行う必要があります。C++ は Java よりも速いかもしれません (これは議論の余地のある FWIW です) が、Java を使用するとプラットフォームの独立性をより簡単に得ることができます。Python と Ruby は同じ関係にあります。

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

IMO、最善の策はJavaをターゲットにすることです...または、少なくとも JVM です。Java 言語が好きではない場合 (C# 開発者としてはそうではないと思います)、少なくとも Jython、JRuby、Scala などの選択肢があります。JVM を使用すると、非常に優れたプラットフォーム独立性、優れたパフォーマンスが得られ、膨大な数のライブラリやサポート ツールにアクセスできます。ほとんどの場合、必要なことを実行する Java ライブラリ、ポート、または実装が存在します。これほど多くのオプションを備えたプラットフォームは他にはないと思います。その柔軟性には真の価値があります。

モジュール性については次のようになります。どのプラットフォームを使用するかよりも、ソフトウェアをどのように構築するかが重要です。私はあなたが説明したようなプラグインアーキテクチャについてはあまり知りませんが、あなたが選択したほとんどすべての最新のプラットフォームで可能であると思います。

Python 開発を行う予定がある場合は、いつでも使用できます。 パイレックス 遅い部分の一部を最適化します。

私は Mono の経験が限られているので、この製品にはかなり満足していると言えます。開発が活発に行われており、最新の .Net テクノロジの仕様に合わせるために多くの継続的な努力が行われているという事実は、心強いことです。既存の .Net スキルを複数のプラットフォームで使用できることは、非常に便利です。Python + PyGTK でいくつかの基本的なタスクを実行しようとしたときも、パフォーマンスに関して同様の問題がありました。適切な操作を行えば実行できるかもしれませんが、90% の確率でパフォーマンスを心配する必要がないのは素晴らしいことです。

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

つまり、 良い クロスプラットフォーム アプリケーションでは、プラットフォームごとにいくつかのことを異なる方法で実行する必要があります。

たとえば、OS X がおそらく最も異なっています。環境設定は通常、.plist として ~/Library/Pfernces/ に保存され、UI は一般にフローティング ウィンドウをベースにしており、単一のメニュー バーが画面上部にドッキングされています。

ここでモジュール性が発揮されると思います。上記の設定の例では、クラスを作成できます。 UserConfig, 、OS 固有のバージョンがあります。Windows では設定データが適切な場所に保存されます。 Application Data フォルダー、またはレジストリ。Mac OS では .plist ファイルを使用します。 ~/Library/Preferences/, 、UNIX のものは ~/.dotfiles を使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top