2

我正在尝试在我的工作场所构建服务器和应用程序的模型。一台服务器可以托管许多应用程序。一个应用程序可以托管在许多服务器上。

通常我只会让主机类包含一个列表,而应用程序类包含一个列表。但是,有一些特定于特定主机-应用程序关系的字段。例如,UsedMb 表示主机上的应用程序使用的磁盘空间量。

当然,我可以有一个 HostedApplication 类来表示一个包含 UsedMb 字段的中间对象。Host 和 Application 类都将包含一个 List。

然而,问题在于,应用程序还需要了解其主机的某些方面,这些方面将包含在 Host 类中(例如,主机在地理上分布;应用程序需要知道它托管在多少个数据中心,因此它需要能够检查其所有主机的 DC 名称。

因此,我可以让 HostedApplication 类同时保存对它所引用的 Host 对象和 Application 对象的引用。但在某些情况下,我需要遍历所有应用程序(在其他情况下,需要遍历所有主机)。因此,我需要 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 回答