実際のコード(クラス)とそれらが配信されるモジュールを区別します。単純なケースでは、アプリケーションを起動し、一般的には、「これらの場所で必要なクラスが見つかるでしょう」という言葉はモジュールのリストです。 PATH(DLL用)および/またはCLASSPATH(Javaクラス用)を使用します。アプリケーションは通常、クラスがどのDLLまたはJARから来たのかを知る必要はありません。 [複数のモジュールに異なるバージョンのコピーが含まれている可能性はどうですか?クラスローディングが楽しいものになるのは間違いないでしょうが、それ以外の話もあります。]
どのようなクラスが必要なのですか?考えられる方法はたくさんありますが、概念的には何らかの構成によって実現します。
は、コントロールと依存性注入の反転のアイデアを見ては、多分私はあなたの例では、約求めているものの種類を行うように変更されるかもしれない方法を示します
here
を開始してもらいます。私は「モジュール」という言葉を使いたくないのですが、ここでは意味が多すぎます。代わりに、私は、「プラグイン」を使用します - コードの1個以上が利用可能になっている、私たちの見解が提供される:すべてを使用することを望んでいる。これは、我々はすべてのプラグインは、いくつかの合意に準拠していることを前提とすることができた場合に動作します
Controller {
// the list of what you have been calling modules
List<IPlugins> myPlugins;
initialise() {
// somehow we initialise that list of plugins
// imagine we read a config file, or some such
// If you read about Dependency Injection you'll see
// how we might do that
}
index(){
viewModel.setUser("John");
viewModel.setCategory("Programer");
showView(viewModel);
}
}
View {
showView(viewModel) {
System.out.println(viewModel.getUser().toString());
System.out.println(viewModel.getCategory().toString());
forEach(onePlugin : viewModel.getPlugins()) {
System.out.println(onePlugin.getDisplayString());
}
}
}
ここで、すべてのプラグインに対してgetDisplayString()を呼び出すことができます。
通常、あなたが話しているモジュール性の種類は、何がフレームワークにプラグインされているかをある程度制御することによって決まります。それは非常に洗練された得ることができます。 Javaなどの言語を使用すると、オブジェクトを取得し、「反映」して名前が「getXXXXX()」のようなすべてのメソッドを見つけることができます。したがって、ビューには古いオブジェクトを指定することができ、単純にgetName()、getPhoneNumber()getPostCode()の結果を出力することができます...
ここで重要な点は、それは呼ぶメシードです。その場合、ビューは非常に柔軟性があります。
私はあなたが何を求めているのか分かりません...モジュールを使用するコードを尋ねるなら、Linuxカーネル、Apache Webサーバー、Perl、ピジンなど – derobert
私はたくさんのものを知っていますが、どのように機能しますか?自分のアプリケーションでどのように再現できますか? –
私はあなたがいくつかの違いの概念を区別していないと思います。以下に示すコードはすべて、「ロケータ」の有無に動的に適応することです。これは、アプリ全体が1つ以上のモジュールにわたってどのように構成されているかに限定されません。あなたが具体的に達成しようとしていることについてもう少し説明してください。モジュールへのパーティショニングとアプリケーションの1つは、機能の有無に動的に適応することのもう1つです。あなたはどちらを解決しようとしていますか? – djna