我正在尝试在我的工作场所构建服务器和应用程序的模型。服务器可以托管许多应用程序。可以跨多个服务器托管应用程序。
通常我会让主机类包含List,而应用程序类包含List。但是,有一些特定于特定主机 - 应用程序关系的字段。例如,UsedMb表示应用程序在主机上使用的磁盘空间量。
我当然可以使用HostedApplicationclass来表示一个中间对象,它将保存UsedMb字段。然后Host和Application类都包含List。
但问题是,应用程序还需要了解其主机的某些方面,这些方面将包含在Host类中(例如,主机在地理位置上是分布式的;应用程序需要知道它有多少数据中心托管在,因此它需要能够检查其所有主机的DC名称。
因此,我可以让HostedApplication类保持对它引用的Host对象和Application对象的引用。但在某些情况下,我需要遍历所有应用程序(在其他情况下,所有主机)。因此,我需要3个单独的列表,List,List和List,以便能够根据需要遍历所有这三个。
我的基本问题是,处理这种配置的标准方法是什么?所有选项都有优点和缺点。我提到的最后一个选项似乎最正确,但有三个列表是否过度杀伤?有更优雅的解决方案吗?
答案 0 :(得分: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的文档:link
祝你好运!