Как избежать перегрузки из-за дублирования кода? - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь вставить имя, хешированный пароль, соль и тип хеша в базу данных.Меняется только тип параметров.Я считаю, что это можно сделать более эффективно.Как я могу избежать использования перегрузки?Нужно ли использовать дженерики?Спасибо.

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 голосов
/ 01 марта 2019

Я не вижу здесь большой проблемы, потому что вы всегда заканчиваете тем, что вставляете пароль в виде строки в таблицу login.Поэтому я советую всегда использовать первую версию:

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

Если вы встретите свой пароль как byte[], просто используйте конструктор строки для генерации String:

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

Итак, для ясности, я предлагаю, возможно, удалить второй метод, потому что, кроме одного параметра, он делает одно и то же на уровне базы данных.

Хранение обоих методов означает больше работы по обслуживанию в вашей базе кода., потому что если вы измените один, вам придется сделать те же логические изменения в другом.

0 голосов
/ 01 марта 2019

На ум приходят два способа:

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

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

Вариант 1: извлечь код в методе, который вызывает оба:

public String getValue(String value1) {
  return getMyValue(value1, 0);
}

public String getValue(String value1, int num) {
  return getMyValue(value1, num);
}

public String getMyValue(String val, int num) {
  return val + String.valueOf(num);
}

или, вариант 2, объединить вызовы:

public String getValue(String value1) {
  return getValue(value1, 0);
}

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

но, в вашем случае, вы должны спросить себя, нужны ли вам оба метода.

0 голосов
/ 01 марта 2019

Первый метод можно вызвать из второго, например:

protected void insert(String name, byte[] secretpassword, String salt, String type)
{
    insert(name, Arrays.toString(secretpassword), salt, type);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...