私は実際に、クライアントがリポジトリ サーバーからダウンロードする必要があるモジュールに依存するアプリケーションに取り組んでいます。モジュールは、jar、dll、zip などの任意のアーカイブにすることができます。
クライアントは最初に一連のプロパティ (サーバーによって既に定義されているキーと値のセット) をリポジトリ サーバーに送信します。サーバーはこれらのプロパティに基づいて計算を行い、クライアントに対応するすべてのモジュールを返します。クライアントが古いモジュールを必要とする場合、サーバーは最新のモジュールをクライアントに送信して更新できるようにします。サーバーは、モジュール間の依存関係を計算し、maven のようにクライアントに送信する必要もあります。
しかし、主な問題は、クライアントから送信されたプロパティがクライアント環境に固有であるため、それらについて推測できないことです。
私が最初に思いついたのは、各列がプロパティを表し、各行がモジュールを表すマトリックスを作成することでした。マトリックスでは、プロパティを追加および削除できます。そして、マトリックスのケースごとに、そのモジュールに対応する値を追加します。
たとえば、2 つのモジュールと一連のプロパティがあるとします{OS, Archive, Arch, Version, .Net}
。module1 の場合、値は{OS="Windows 7", Archive="dll", Arch=32-bits, Version="2.0.0",.net=3.5}
です。module2 の場合、値は次のとおりです。{OS="Windows 7", Archive="jar", Version="2.1",.net="4.0"}
ただし、このケースは、各プロパティに値が 1 つしか含まれていない場合に完全に機能します。module1
クライアントが、Windows 7 (およびmodule2
) で動作し、dll
.net 3.5 の上位バージョンをサポートするアーカイブで実行されるすべてのモジュールが必要であると言った場合、. module1
返されます。
それは完璧に機能します。
しかし、各プロパティに複数の値を含めることができる場合はどうなるでしょうか (これは私たちの場合です)。たとえば、前の例で、module1 が Windows 7、Vista、XP で実行できる場合。OS プロパティについては、クライアントから送信された各プロパティを調べて、正しい値を検索する必要があります。それが組み合わせ計算です。
このプロセスで見られるのは、apt や yum などのパッケージ管理システムに非常に似ています。
この問題に対するより良いアプローチは何ですか?