Jak to poukładać poniży kod według wytycznych GRASP i Agile
Głównie chciałbym aby klasy miały wysoką specjalizację, czyli charakteryzować się wysokim współczynnikiem kohezji i być luźno powiązane (coupling).
Poniżej mam kod który jest napisany jak leci a chciałbym aby był zgrabny.
także nie czuję kiedy używać dziedziczenia a kiedy kompozycji.
package SQL;
public class ConnectToDB
{
public static SqlConnector connector
= new SqlConnector
();
int dbSize1= connector.dbSize();
return dbSize1;
}
/**
* metoda statyczna uruchamiająca polaczenie do DB
*/
public static SqlConnector startConnectToBD
() {
String nazwaHosta = "xxx";
String nazwaBazy = "xxx";
String uzytkownik = "xxx";
String haslo = "xx";
//static SqlConnector connector = new SqlConnector();
/*
* Wczytujemy sterownik bazy danych, łączymy się z naszą bazą danych
*/
connector.loadDriver();
connector.connectToDB(nazwaHosta, nazwaBazy, uzytkownik, haslo);
return connector;
}
}
i kolejna klasa:
package SQL;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author Ewa
*
*/
/**
* @author Ewa
*
*/
public class SqlConnector
{
/*
* To jest nasz obiekt, dzięki któremu wgramy sterownik, połączymy się z
* bazą danych, wykonamy zapytania.
*/
private Connection connection = null;
private Statement statement = null;
private PreparedStatement preparedStatement;
private ResultSet resultset;
/*
* Ładujemy sterownik bazy danych, sterownik MySQL.
*/
public void loadDriver()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e)
{
.println("Class :"
+ this.getClass().getPackage()
+ this.getClass().getName()
+ "Wyglda na to, że nie załadowałeś sterownika bazy danych. Sprawdz czy posiaasz <a href="http://dev.mysql.com/downloads/"%3b%29;" target="_blank">http://dev.mysql.com/downloads/");</a>
e.printStackTrace();
return;
}
System.out
.println
("Sterownik MySQL JDBC załadowany. # " + this.getClass().getName());
}
/*
* Łączymy się z danych za pomocą zadeklarowanych zminnych
*/
public void connectToDB(String nazwaHosta, String nazwaBazy,
String uzytkownik, String haslo)
{
String host = nazwaHosta;
String db = nazwaBazy;
String user = uzytkownik;
String password = haslo;
System.out
.printf("jdbc:mysql://" + host
+ ":3306/" + db
, user
, password);
try
{
connection = DriverManager.getConnection("jdbc:mysql://" + host
+ ":3306/" + db, user, password);
} catch (SQLException e)
{
.println("\nCoś poszło nie tak w SqlConnector.connectToDB()");
e.printStackTrace();
return;
}
if (connection != null)
{
System.out
.println
("\n Połączenie udane."); } else
{
System.out
.println
("\nPołączenie nieudane."); }
}
public void setCountInToFILM(int id_slowka_ang, int ilosc_wystapien)
{
System.out
.println
("Start setCountInToFILM()" + this.getClass().getName());
try
{
String query = "INSERT INTO Film (id_slowka_ang, ilosc_wystapien) VALUES ('"
+ id_slowka_ang + "','" + ilosc_wystapien + "' )";
statement = connection.createStatement();
statement.execute(query);
}
catch (NullPointerException e)
{
System.out
.println
("problem w NullPointerException"); e.printStackTrace();
}
catch (SQLException e)
{
System.out
.println
("Coś poszło nie tak.w setFilm " + this.getClass().getName());
e.printStackTrace();
}
}
public Word getWordFromDictionary(int id_slowka)
{
String slowko_ang = null;
String slowko_pl = null;
try
{
String query = "SELECT slowko_ang, slowko_pl FROM dictionary WHERE id_slowka = "
+ id_slowka;
preparedStatement = connection.prepareStatement(query);
resultset = preparedStatement.executeQuery();
{
slowko_ang = resultset.getString("slowko_ang");
slowko_pl = resultset.getString("slowko_pl");
}
resultset.close();
preparedStatement.close();
} catch (SQLException e)
{
System.out
.println
("Coś poszło nie tak w SqlConnector.getword()"); e.printStackTrace();
}
return new Word(id_slowka, slowko_ang, slowko_pl);
}
public Film getWordsFromFilmDB(Integer id_film)
{
Integer id_slowka_ang = 000;
Integer ilosc_wystapien = 000;
try
{
String query = "SELECT * FROM film WHERE id_film = " + id_film;
preparedStatement = connection.prepareStatement(query);
resultset = preparedStatement.executeQuery();
{
id_slowka_ang = resultset.getInt("id_slowka_ang");
ilosc_wystapien = resultset.getInt("ilosc_wystapien");
}
resultset.close();
preparedStatement.close();
} catch (SQLException e)
{
.println("Coś poszło nie tak w SqlConnector.geWordsFromFilmDB()");
e.printStackTrace();
}
return new Film(id_film, id_slowka_ang, ilosc_wystapien);
}
public void eraseTable(String table)
{
int ile = dbSize(table);
try
{
String query = "TRUNCATE TABLE " + table;
preparedStatement = connection.prepareStatement(query);
// resultset = preparedStatement.executeQuery();
preparedStatement.executeUpdate("TRUNCATE " + table);
resultset.close();
preparedStatement.close();
} catch (SQLException e)
{
System.out
.println
("Coś poszło nie tak eraseTable. " + this.getClass().getName());
e.printStackTrace();
} catch (NullPointerException e)
{
System.out
.println
("Nul w eraseTable " + this
.getClass
().getName
()); e.printStackTrace();
}
System.out
.println
("Usunięto zawartość tabeli " + table
+ " o wielkości " + ile + "Teraz zawiera wierszy: "
+ dbSize(table));
}
// /////////////////////////table start
public void copyTable()
{
String query = "INSERT INTO tmp SELECT * FROM Film";
try
{
statement = connection.createStatement();
statement.execute(query);
resultset.close();// finaly?
preparedStatement.close();
} catch (SQLException e)
{
System.out
.println
("Coś poszło nie tak copyTable " + query
+ " " + this.getClass().getName());
e.printStackTrace();
} catch (NullPointerException e)
{
System.out
.println
("Nul w copyTable() " + query
+ " " + this.getClass().getName());
e.printStackTrace();
}
System.out
.println
("copytable finis"); }