2

職場でサーバーとアプリケーションのモデルを構築しようとしています。サーバーは多くのアプリケーションをホストできます。アプリケーションは、多数のサーバーでホストできます。

通常は、ホスト クラスに List を含め、アプリケーション クラスに List を含めます。ただし、特定のホストとアプリケーションの関係に固有のフィールドがいくつかあります。たとえば、UsedMb は、ホスト上のアプリケーションによって使用されるディスク容量を表します。

もちろん、UsedMb フィールドを保持する中間オブジェクトを表す HostedApplicationclass を持つこともできます。Host クラスと Application クラスの両方に List が含まれます。

ただし、問題は、アプリケーションが Host クラスに含まれるホストのいくつかの側面についても知る必要があることです (たとえば、ホストは地理的に分散しています。アプリケーションは、ホストされているデータ センターの数を知る必要があります)。であるため、すべてのホストの DC 名を確認できる必要があります。

代わりに、HostedApplication クラスに、それが参照する Host オブジェクトと Application オブジェクトの両方への参照を保持させることができます。しかし、場合によっては、すべてのアプリケーション (場合によってはすべてのホスト) をループする必要があります。したがって、必要に応じて 3 つすべてをループできるようにするには、List、List、List の 3 つの個別のリストが必要です。

私の基本的な質問は、この種の構成を処理する標準的な方法は何ですか? すべてのオプションには長所と短所があります。最後に挙げたオプションが最も正しいように思えますが、リストを 3 つ持つのはやり過ぎですか? よりエレガントなソリューションはありますか?

4

1 に答える 1

1

理想的には、私は問題についてあなたと話すことができますが、ここでは、要件の大まかな理解に基づいた潜在的な解決策を示します (多くの実装が省略された C++ スタイル)。

class Host {
public:

  string GeographicLocation() const;
  string DCName() const;
};

class HostAsAppearsToClient : public Host {

  HostAsAppearsToClient(const Host&);
  // Allows Host -> HostAsAppears... conversion

  size UsedMB() const;
  void UseMoreMB(size) const;
};

class Client {
  HostAsAppearsToClient* hosts;

  void AddHost(const Host& host) {
    // Reallocate enough size or move a pointer or whatever
    hosts[new_index] = HostAsAppearsToClient(host);
    hosts[new_index].UseMoreMB(56);
  }

  void DoSomething() {
    hosts[index].UsedMB();
    // Gets the MB that that host is using, and all other normal host data if
    // we decide we need it ...
    print(hosts[index].DCName());
  }
};

int Main() {
  Host* hosts = new Host[40];
  Client* clients = new Client[30];

  // hosts[2].UsedMB() // Doesn't allow
}

これがお客様の要件を満たしていないことを十分に承知しておりますが、お客様の問題をよりよく理解できるように、どのような方法でお知らせください。

編集:

VBA .... 不運 :-P

VBA で dll をロードすることは可能です。これにより、他の言語でコードを記述してコンパイルし、VBA を介して入力と出力を UI から DLL に転送することができますが、それが価値があるかどうかはあなた次第だと思います。それ。VBA Excel で dll を使用する方法に関するドキュメント:リンク

幸運を!

于 2012-08-23T09:53:21.683 に答える