MEF と Lua には類似点があります。どちらもメソッドを登録し、必要に応じてデプロイできます。MEF と Lua はどちらも IoC / 依存性注入の形式ですか?
2 に答える
これらのテクノロジーの大きな違いを認識しており、次の質問に焦点を当てていると仮定します。
「MEF と Lua はどちらも IoC / 依存性注入の形式ですか?」
また、言語としての組み込み Lua と Lua について話していると仮定します。
まず、依存性注入を制御の反転から分離しましょう。Fowler は、依存性注入を特定の形式の IoC と定義しました。これは、IoC の概念が非常に一般的になり、システムの際立った特徴ではなくなったためです。彼の定義には、コンストラクター注入、セッター注入、インターフェイス注入の 3 つの主なタイプの依存性注入が含まれています。3 つのタイプすべてにおいて、アイデアは、クラスまたはインターフェイスの特定の実装を、それを必要とするクラスまたはメソッドに挿入することです。依存関係とそれを使用するクラスを切り離すことができるため、これは非常に巧妙です。コントラクトに従っている限り、依存関係の実装を編集したり交換したりできますが、消費者は気にしたり、影響を受けたりする必要はありません。
この定義を使用すると、MEF は成功し、組み込まれた Lua は失敗したと言えます。MEF は主に依存性注入フレームワークです。特定のコントラクトを実装する外部クラスを動的にロードして構成することができます。一方、Lua はスクリプトによる拡張を可能にしますが、コントラクトの方法はほとんどありません。もちろん、アプリに Lua API を提供することもできます。これは一種の契約ですが、真の契約が守られることを保証するものではありません。
IoC はより広範です ( Fowler、ウィキペディア) 共通のテーマは、メイン プログラム フローが一時的に制御を放棄しますが、作業を行っているコンポーネントからフロー ステータスの更新を受け取ることです。これを達成するための一般的な方法には、イベント、閉鎖、および継続が含まれます。
この定義を使用すると、MEF は簡単に通過し (制御は実行時に不明なコンポーネントに渡されます)、埋め込み Lua の引数も作成できます。メイン プログラムは、外部スクリプトで定義された関数が必要になるまで進みます。その時点で、スクリプトが完了するか中断されるまで、制御がスクリプトに渡されます。
1 つ注意しなければならないのは、Lua はこの点で特に特別ではないということです。Perl、Python、Tcl、および Ruby を組み込むことができます。実際、IoC の一般的な定義は、最新のプログラミング環境では特に役に立ちません。それはあまりにも一般的です。Fowler 氏は、依存性注入を特別なケースとして導入したのはそのためだと述べています。GUI、イベント、スレッド、デーモン、クロージャ、継続、モナドの世界では、すべてが IoC を使用しています。今日、人々が「IoC」と言うとき、多くの場合、ある種の依存性注入を意味します。
MEF は Lua とは関係がなく、Lua とはまったく異なります。
MEF は拡張用のフレームワークです (基本的には素晴らしいプラグイン フレームワークです)。
Lua は非常に優れたスクリプト言語です。
「どちらも必要に応じてメソッドを登録し、デプロイできます。」この文は、C、C++、C#、VB、SQL、DI フレームワーク、JavaScript、ゼネラル モーターズ、フォード、病院などに適用されます。