サーバーとアプリケーションの 2 つのクラスがあり、多対多の関係があります。サーバーは複数のアプリケーションを実行でき、アプリケーションは複数のサーバーで実行できます。3 番目のクラスである Host は、単一のサーバー上の単一のアプリケーションを表します。これには、Application および Server オブジェクトへの参照と、サーバー上のアプリケーションによって使用されるディスク容量などの追加データが含まれます。サーバー オブジェクトとアプリケーション オブジェクトの両方に、すべてのホストのリストが含まれます。したがって、アプリケーションはホストを認識し、ホストはアプリケーションを認識し、サーバーはホストを認識し、ホストはサーバーを認識します。
私のプロジェクトの目的は、一連のアプリケーションを新しいサーバーに移行するスケジュールを立てることです。当初、各アプリケーションには移行開始日と移行終了日がありました。一部のアプリケーションには、仮想化の開始日と終了日もあります。仮想化は、アプリケーションの制約内で移行を実行できない場合に発生します (これらが何であるかは気にしないでください)。これは移行の前に行われ、アプリケーションをその制約から解放します。「スケジュール」と呼ばれるオブジェクトは、アプリケーション オブジェクトによって保持されます。これには、これら 4 つの日付、仮想化するかどうかを示すブール値フラグ、および移行に必要な工数を含む「月」のリストが含まれます (または仮想化)各特定の月のアプリケーション。
指定された日に、サーバーを個別に仮想化できるようにしたいと考えています。これらのサーバー上のすべてのアプリケーション (またはアプリケーションの一部、つまりホスト) は、この日に仮想化されます。アプリケーションの残りの部分と一緒に移行されます。最初は、サーバー クラスに独自の Schedule オブジェクトを保持させることにしました。次に、仮想化の日付がサーバーに設定されました。ただし、サーバーとアプリケーションのスケジュールの一貫性を保つことにしました。たとえば、サーバー スケジュールの移行の開始日と終了日を、そのサーバーで実行されているすべてのアプリケーションの最も早い開始日と最も遅い終了日にそれぞれ設定する必要があります。サーバ。つまり、アプリケーションの日付を更新するたびに、すべてのサーバーの日付を (ホスト オブジェクトを介して) 更新することを覚えておく必要がありました。または、アプリケーションを更新したい場合'
次に、各 Host オブジェクト内に 1 つの Schedule オブジェクトを配置することを考えました。これにより、一貫性の問題は解決されますが、かなりの冗長性が生じます。アプリケーションに属するすべてのホスト オブジェクトの移行日は必ず同じになるため (ただし、仮想化の日付は異なる可能性があります)、アプリの移行日を設定すると、すべてのホストに同じ日付を設定します。また、上記のように、サーバーとアプリケーションの最早開始日と最遅終了日を計算する必要がある場合もいくつかあります。これには、次のいずれかが含まれます: アプリケーションとサーバー オブジェクトのそれぞれにこのデータを保持する (事実上、それぞれに独自のスケジュールを与えることで、一貫性を保って問題を元に戻す)、または: 必要になるたびに、ループによってこのデータをオンザフライで計算するすべてのホストのスケジュールを通じて。毎月のアプリケーションに必要な工数についても同じことが言えます。これはアプリケーション レベルで計算され、1 か月あたりの各ホストの時間に分割され、アプリケーション レベルで再度計算する必要があるときに再計算されます。ご想像のとおり、これは少しも効率的ではありません。
これは簡単な質問ではありませんが、この種の状況に対処するための受け入れられた戦略があるかどうか疑問に思っています. 私の投稿の冗長性について事前に申し訳ありません。うまくいけば、私は状況を十分に明確にしました。