我有以下(简化)架构:
客户端 - >保镖 - >服务器
客户端向服务器发送命令。 'bouncer'对客户端发出的命令执行完整性和其他检查,并防止错误命令到达服务器。例如,保镖可能具有以下代码:
bool Bouncer::someCommand(const someCommandArg& arg) {
if (arg.x < 100) {
return false;
}
if (arg.y > 10) {
return false;
}
// more checks ...
return server->someCommand(arg);
}
这种方法的问题在于保镖条件必须逐个硬编码,并且不够灵活。我正在寻找一种方法来在一些配置文件中定义这些条件,保镖将在创建时加载,并将循环遍历所有
调用someCommand
时的条件。而且,测试循环本身必须很快。
如果是C#,我想我会使用它的即时编译功能,并在配置文件中用普通代码编写我的if
子句。你对C ++有什么建议?
答案 0 :(得分:2)
选择包括:
最好的方法很大程度上取决于有用谓词,性能要求,部署实践等的复杂性。
答案 1 :(得分:0)
您可以使用插件方法。将保镖作为插件,然后使用管道/责任链模式通过多个保镖传递命令?不同的保镖插件可以检查不同的条件,通过链接它们,您可以定义应用于该命令的最终规则。您可以使用配置文件来指定应加载哪些插件以及如何设置链。
这仍然意味着必须先编译插件才能加载它们,但是如果真的需要,你可以在程序运行时动态加载它们。至少添加新插件不需要重新编译应用程序。