java - OOD - 避免每个成员变量使用重复函数 (Java)

标签 java mysql oop

这个question与我想要完成的任务有很大关系,并提供了很好的见解。虽然我觉得答案仍然不清楚,因为我使用的是 Java 而不是 C++。

我有一个类 (SQLService),它有一个 SQL 连接和 3 个使用 JDBC 库管理的表。我正在构建一个私有(private)函数(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后,我感觉这样效率也很低。

上面提到的文章有使用类成员指针的解决方案。但是,我不确定 Java 中是否有等效的东西。

谢谢!

最佳答案

使用通用功能和表作为参数创建一个私有(private)基函数,添加 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
}

关于java - OOD - 避免每个成员变量使用重复函数 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47063604/

相关文章:

java - 无法在 Spark 应用程序中设置环境变量

java - Androidx的PreferenceScreen使用方法

php - 连接到 Joomla 中的第 3 方数据库?

php - 我如何摆脱过程编程的习惯并进入面向对象的编程?

c# - 用 C# 编写的带有点击移动的 WPF 游戏

java - 如何在 JAVA 中对 JSONArray 进行排序

java - 用单引号替换方法时 Hibernate session.createQuery 错误

php - MySQL 在表之间移动整列

php - 无法将两个数组合并为一个来获取 SQL 查询

c# - 如何使用另一个程序集的内部类