这question与我想要完成的事情有很大关系,并提供了很好的洞察力。虽然我觉得答案仍然不清楚,因为我使用的是Java而不是C ++。
我有一个类(SQLService),它有一个SQL连接和3个使用JDBC库管理的表。我正在构建一个私有函数(buildInsertQuery),它接受每个表中的数据,并根据列数构建一个动态插入语句(请参阅下面的简单代码段)
class SQLService {
private Table table1;
private Table table2;
private Table table3;
private Connection connection;
private String buildInsertQuery() {
// Builds SQL insert query String like "INSERT INTO blah (col1, col2, col3) VALUES (?, ?, ?)
}
}
一个选项是为每个成员变量创建一个单独的函数。但是,由于buildInsertQuery()
函数无论使用哪个表都做同样的事情,我觉得复制和粘贴相同的代码并为每个成员变量命名函数是不同的。
另一种选择是将表作为参数传递给buildInsertQuery
(即buildInsertQuery(Table table)
)。但是,在阅读this之后,我觉得这也是非常低效的。
上面提到的文章有使用Class成员指针的解决方案。但是,我不确定Java中是否存在等价物。
谢谢!
答案 0 :(得分:0)
使用通用功能和表作为参数创建一个私有基本函数,添加3个专门用于调用基函数和相应表的表的方法。
class SQLService {
private Table table1;
private Table table2;
private Table table3;
private Connection connection;
private String buildInsertQuery(Table table) {
// Builds SQL insert query String l
...
}
// perhaps memoize the result for reuse.
String buildInsertQueryForTable1() {
return buildInsertQuery(table1);
}
// similarly for other tables
}