1

コンポーネントの可用性を監視するアプリケーションを設計しています。

そのため、まず、可用性チェック(ジョブなど)を定期的に実行するスケジューラを用意します。

監視するコンポーネントがいくつかあり(将来的にはさらに多くのコンポーネントがサポートされる予定です)、それぞれについて、使用可能かどうかを確認するためのさまざまな方法があります。

そのため、 verifyと呼ばれる抽象ブールメソッドを使用して抽象ComponentStatusVerifierクラスを実行し、各コンポーネントに対して、特定の検証戦略を実装するためのサブクラスを作成することを考えていました。

ただし、問題はもう少し複雑です。アプリケーションは、2つの異なるプラットフォーム(サーバーなど、将来的にはより多くのプラットフォームをサポートする可能性があります)での実行をサポートすることになっています。監視するコンポーネントのセットは、アプリケーションが展開されているプラ​​ットフォームによって異なります。

宛先サーバーごとに個別にアプリケーションを構築することも、構成を通じてアプリケーションが実行されている場所をアプリケーションに通知することもできます。したがって、問題は、アプリケーションが実行されている場所をアプリケーションに認識させる方法ではありません。

私が持っている質問は、これらの実行モードをサポートすると同時に、個々のクラスの高い凝集度を失わないように、アプリケーションの設計をどのように補完するかです。

4

4 に答える 4

1

1つのコンポーネントをチェックし、実行時に実行場所に基づいて検証する必要があるかどうかもチェックするようにComponentStatusVerifierすることできます。メソッドは、それをサポートするために少し拡張する必要があります。関連するパラメーターを受け取る必要があります。アプリケーションが存在するプラットフォームのように。verify

interface ComponentStatusVerifier {
  boolean verify(VerificationParameters parameters);
}

interface VerificationParameters {
  Platform getPlatform();
}

enum Platform {
  PLATFORM1,
  PLATFORM2 // ...
}

booleanまた、あなたの説明から、単純な結果ではなく、いくつかの診断情報が重要であるように思われます。そのために、検証者がレポートできる情報を含むメッセージリストを作成します。次のようになります。

interface ComponentStatusVerifier {
  VerificationResults verify(VerificationParameters parameters);
}

interface VerificationResults {
  boolean succeeded();
  Iterable<Message> getMessages();
}

interface Message {
  string getDescription();
  MessageType getType();
}

enum MessageType {
  INFO,
  WARNING,
  ERROR
}

(私は概念を示すためだけにインターフェースと列挙型を使用し、必要に応じて適応させていることに注意してください...)

サポートされていないプラットフォームで実行されているベリファイアは、次のことを実行できます。

class Platform1SomeComponentVerifier implements ComponentStatusVerifier {
  @Override
  public VerificationResults verify(VerificationParameters parameters) {
    VerificationResults results = new ...
    if (parameters.getPlatform() != Platform.PLATFORM1) {
      results.addMessage(
        new InfoMessage("Skipping verification of component, platform is not PLATFORM1"));
      return results;
    }

    ...
  }
}
于 2012-07-03T14:40:34.147 に答える
0

プロキシクラスを記述して、それが生きているかどうかを確認するために必要なコーディングを行うことができます。



    // Remote box
    class remoteObject {
        int check() {
            // I write code for this universe 
            // is multiverse true ?
        }
    }

    class remoteObjectProxy {
        remoteObject y;
        int check() {
            // do things necessary
            return y.check();
        }
    }




    // Your box
    class localProxy {
        remoteObjectProxy z;
        int check() {
            // do things necessary
            return z.check();
        }
    }


于 2012-07-03T08:01:04.400 に答える
0

この問題に取り組むにはいくつかの方法があります。

監視アプリケーションで検証するようにすべてのアプリケーションを構成できます。これは、特定の時点まで柔軟で拡張可能です。

もう1つの方法(ただし、はるかに煩わしい)は、チェック対象のアプリケーションを監視アプリケーションに登録することです。このように、モニターが実行する必要があるのは、登録されたアプリケーションを呼び出すことだけです。監視アプリケーションは「ダム」になる可能性があるため、これも非常に柔軟で拡張可能です。

Yochaiの提案されたアーキテクチャを使用し、httpリクエスト、rmiなどではありますが、それぞれが別の検証方法を実装する複数のVerifierクラスを用意することをお勧めします。

于 2012-07-03T07:41:36.460 に答える
0

わかりました、あなたの説明によると、 ComponentStatusVerifierが必要なようです。

そのオブジェクトはComponentConnectorClassを保持する必要があります。

ComponentConnectorClassは、検証する必要があるすべてのものを実行してチェックするVerifierクラスのリストを保持する必要があります。

または、 ComponentConnectorClassを実行して、動作するVerifierクラスのリストを与えることができるはずです。

于 2012-07-03T07:32:20.183 に答える