OOD - 避免每个成员变量的重复功能(Java)

时间:2017-11-01 21:01:08

标签: java mysql oop

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中是否存在等价物。

谢谢!

1 个答案:

答案 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
}