我写了libQtCassandra,当前版本不支持超级列。不添加该支持的一个原因是它破坏了库使用的方案,为用户提供了一种使用数组运算符 ([]) 访问和写入数据的方法。
如果您不熟悉,该库让您创建一个“上下文”(与 Cassandra 集群的连接),您可以从该上下文中编写如下内容:
// set value 123 in "column name" of "row key" of "column family":
context["column family"]["row key"]["column name"] = 123;
// retrieve that value:
int value = context["column family"]["row key"]["column name"];
所以……很简单。但是,如果我们引入超级列,我们会增加一个数组访问,这取决于是否存在超级列。你会怎么做?
你会使用函数来访问超级列吗?
context["column family"]["row key"].sc("super column")["column name"] = 123;
或者你会让超级列像其他参数一样无缝工作?
context["column family"]["row key"]["super column"]["column name"] = 123;
显然系统(列族)知道什么是什么。所以无论哪种方式都很容易实现,只是它使库变得更加复杂,以支持超级列的数组语法。
我有另一个想法是添加一个可以在指定行时使用的对象。但这看起来相当难看:
context["column family"][sc("row key", "super column")]["column name"] = 123;
这更容易实现,但在查看最终代码时看起来不太好。
对于这样的问题,什么是更像 stl 或类似 boost 的方法?