2009-08-08 7 views
0

モジュールへのハウツープログラムについての例や読書資料があまりないのはなぜかと思いました。あなたのアプリケーションでモジュールmindsentを分割して追跡する方法は?

大規模なプロジェクトでは、非常に多くのコードが途中で途切れることがあります。

私は、モジュールに向けられたデザインの簡単な例やリンクを理解したいと思います。

モジュールは、システムのスタンドアロン部分です。いつでもメインモジュールにさらに多くのモジュールを取り付けることができます。

fooApp-Core.jar(.dllファイル) fooApp-BI fooApp-レポート

コア、その必要なlibに、UI、コントローラーとビューで、基本的なドメインモデルを持っているでしょう。

しかし、BIが使用できるかどうかCoreにはどのようなことが分かりますか?彼らは必要な電話をかける?

私は自分自身を明確にしましたか?

可能であれば、私は例が大好きです。

+0

私はあなたが何を求めているのか分かりません...モジュールを使用するコードを尋ねるなら、Linuxカーネル、Apache Webサーバー、Perl、ピジンなど – derobert

+0

私はたくさんのものを知っていますが、どのように機能しますか?自分のアプリケーションでどのように再現できますか? –

+0

私はあなたがいくつかの違いの概念を区別していないと思います。以下に示すコードはすべて、「ロケータ」の有無に動的に適応することです。これは、アプリ全体が1つ以上のモジュールにわたってどのように構成されているかに限定されません。あなたが具体的に達成しようとしていることについてもう少し説明してください。モジュールへのパーティショニングとアプリケーションの1つは、機能の有無に動的に適応することのもう1つです。あなたはどちらを解決しようとしていますか? – djna

答えて

1

実際のコード(クラス)とそれらが配信されるモジュールを区別します。単純なケースでは、アプリケーションを起動し、一般的には、「これらの場所で必要なクラスが見つかるでしょう」という言葉はモジュールのリストです。 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()の結果を出力することができます...

ここで重要な点は、それは呼ぶメシードです。その場合、ビューは非常に柔軟性があります。

0

これを例として取り上げます。

fooApp-Core.jar

Controller { 

    index(){ 

    viewModel.setUser("John"); 
    viewModel.setCategory("Programer"); 

    if(userLocatorModuleExists()) 
     viewModel.setLocation(locatorModule.locate(viewModel.getUser())); 

    showView(viewModel); 
    } 

} 

View { 

    System.out.println(viewModel.getUser().toString()); 
    System.out.println(viewModel.getCategory().toString()); 

    if(userLocatorModuleExists()) 
     System.out.println(viewModel.getLocation().toString()); 
} 

は、これがどのように動作するかですか?

+0

これは動作しますが、それほど柔軟性がありません。 1つの問題は、ViewとControlledがそれぞれ異なる「モジュール」ごとに固有のコードを必要とし、新しいモジュールが作成された場合は両方を変更する必要があることです。 また、実際にはモジュールとは関係ありません。このコードは、すべてのクラスが同じモジュール内にある場合と全く同じように動作します。 – djna

関連する問題