.NETの種類が非常に多いのはなぜですか?いいことですか?[閉まっている]


9

.NET Frameworkには多くの「フレーバー」があります

  • フル(「通常」)
  • クライアントプロファイルサブセット
  • WebブラウザーのSilverlight
  • Windows Phoneの「Silverlight」
  • コンパクトなフレームワーク
  • WinRT

新しいプラットフォームでC#コードが必要な場合、MicrosotはBCL内の既存のアセンブリを使用するのではなく、完全なCLRを取得して小さなサブセットにストリップし、新しいアセンブリを作成して型を移動することを好むようです。 。たとえばSilverlightはList<T>、WPF と同じ実装を単に参照するのではなく、WPFに対して異なるクラス/メソッド(わずかに異なるシグネチャまたは非常に異なる実装を持ついくつかのメソッドにさえ)を持っています。

これは理想的なアーキテクチャですか、それともレガシーの兆候ですか?BCLをすべてのプラットフォームで実行し、それぞれに異なるプレゼンテーション/ IOライブラリを使用する必要はありませんか?または、BCLと他のライブラリが肥大化していて、それらを分割すると、多くの下位互換性の問題が発生し、受け入れられなくなりますか?

空白のキャンバスから始めて、下位互換性について心配していなかったとしたら、現在の状況が実際に複数のプラットフォームを処理する最良の方法でしょうか?


7
すべての近い投票とは何ですか?これは完全に正当な質問です。
Mason Wheeler、

2
これは、おそらくそれが少し批判的に表現されているために、閉じられる可能性があるように見えます(「設計が不適切」であると既に判断したように聞こえます)。「.NETのフレーバーがこんなにたくさんあるのはなぜですか?」と言い換えることもできます。
FrustratedWithFormsDesigner 2012年

1
@FrustratedWithFormsDesignerは正しいです。問題は、.NETに対する偏見から始まります。調子がより中立的だった場合、近い票が投じられなかったのではないかと思います。
2012年

2
あなたはあなたの質問に対する建設的な答えを探しているのではなく、あなたが議論を始めようとしているように感じます。あなたが近い票を獲得しているのはそのためだと思います。
Tyanna 2012年

2
@Oded and others-タイトルと本文を書き換えました。あなたの承認に
会える

回答:


5

ルーチンを複数のパッケージに分割するというMicrosoftの活動は一般的です。メモリが制限されたシングルボードコンピューター(.Net Micro Framework)で実行される.NETのバージョンがあります。たとえば、完全なグラフィカルユーザーインターフェイスを実行するために必要なすべてをそのバージョンに含めることは意味がありません。

Appleを見ると、iPhoneにはMacで見つかるすべてのルーチンが含まれているわけではありません。


しかし、開発者がコードをコピーして貼り付けてList<T>Micro Frameworkを作成するのList<T>ではなく、BCLを適切に分割して、バイナリがすべてのプラットフォームで実行されるようにしないでください。
Paul Stovell、2012年

2
言い換えれば、コードを別のプラットフォームで実行させるのは、サポートするアセンブリを選択するだけのケースではありませんか?
Paul Stovell、2012年

1
Javaもこれを行います。たとえば、Java CardJavaのサブセットです。
バーナード

2
@PaulStovell:MSがそれをどのように行うのかわからない...しかし、MSがコードを取得してターゲットプラットフォーム用にビルドする別のビルドパス/スクリプト(簡単に言えば)があったとしても驚かないこれはコピー/貼り付けではList<T>ありませんが、コードから一部を削除したり、プラットフォーム固有のものとマージして、展開アイテムを作成したりする場合があります。
Steven Evers 2012年

1

.NETが問題だとは思わない。さまざまなランタイムがありますが、それらには互換性があります。そのため、ポータブルクラスライブラリなどのテクノロジーが機能します(リストしたランタイムの大部分に対して)。

たとえば、各ランタイムは、コレクションのさまざまなコピーを持つ独自のSystem.dll / mscorlib.dllのコピーを持つのではなく、「System.Collections.dll」と呼ばれる単一の共有アセンブリを参照してはなりませんか?

なぜこれが必要なのですか?BCLはランタイム自体の一部であり、タンデムで配布されるため、すべて互換性がある限り(ここでも、ポータブルクラスライブラリを参照)、これは問題になりません。


List<T>ポータブルライブラリを作成せずに、任意のプラットフォームでのみ使用および実行するクラスを記述できないのでしょうか。それともList<T>それ自体がポータブルライブラリにあるべきではありませんか?ポータブルライブラリは、エレガントなデザインの一部というよりは、回避策のように感じます。
Paul Stovell、2012年

1

.NETは基本的に、Windows環境でcomオブジェクトを置き換え、拡張しています。また、Adobeがすべての製品の名前を変更して、名前に一般的な単語が含まれるようになったとします。これは、.NETで起こっていることのようなものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.