如何避免由于代码重复而导致的重载?

时间:2019-03-01 08:08:32

标签: java hash

我正在尝试将名称,哈希密码,盐和哈希类型插入数据库。唯一改变的是参数的类型。我相信可以更有效地做到这一点。如何避免使用重载?我需要使用泛型吗?谢谢。

InsertMethods

protected void insert(String name, String secretpassword, String salt, String type)
{
    String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";

    try (Connection conn = this.connect();
         PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, name);
        pstmt.setString(2, secretpassword);
        pstmt.setString(3, salt);
        pstmt.setString(4, type);
        pstmt.executeUpdate();
        System.out.println("Successful");
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

protected void insert(String name, byte[] secretpassword, String salt, String type)
{
    String sql = "INSERT INTO login(username,password,salt,type) VALUES(?,?,?,?)";

    try (Connection conn = this.connect();
         PreparedStatement pstmt = conn.prepareStatement(sql)) {
        pstmt.setString(1, name);
        pstmt.setString(2, Arrays.toString(secretpassword));
        pstmt.setString(3, salt);
        pstmt.setString(4, type);
        pstmt.executeUpdate();
        System.out.println("Successful");
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

3 个答案:

答案 0 :(得分:6)

您可以从第二个方法中调用第一个方法,如:

protected void insert(String name, byte[] secretpassword, String salt, String type)
{
    insert(name, Arrays.toString(secretpassword), salt, type);
}

答案 1 :(得分:3)

我在这里没有多大问题,因为您总是最终将密码作为字符串插入到login表中。因此,我建议始终使用第一个版本:

protected void insert(String name, String secretpassword, String salt,
    String type);

如果您以byte[]的身份登录密码,只需使用字符串的构造函数生成一个String

byte[] array = ...;
String password = new String(array);

因此,很明显,我建议可能删除第二种方法,因为除了一个参数外,它在数据库级别上的作用完全相同。

保留这两种方法意味着在代码库中进行更多的维护工作,因为如果您更改一种方法,则必须在另一种方法中进行相同的逻辑更改。

答案 2 :(得分:1)

想到两种方法:

generateMockData.js

方法1:在同时调用以下方法的代码中提取代码:

var jsf = require('json-schema-faker');
var mockDataSchema = require('./mockDataSchema');
var fs = require('fs');

var json = JSON.stringify(jsf(mockDataSchema));

fs.writeFile("./src/api/db.json", json, function (err) {
  if (err) {
    return console.log(err);
  } else {
    console.log("Mock data generated.");
  }

});

或选项2,将通话链接:

public String getValue(String value1) {
  return value1 + "0";
}

public String getValue(String value1, int num) {
  return value1 + String.valueOf(num);
}

但是,在您的情况下,您应该真正问自己是否需要两种方法。