Hur kan jag förbättra koden? [Java]

Permalänk

Hur kan jag förbättra koden? [Java]

Jag håller på med ett projekt just nu och har en class som fungerar, dock tycker jag den är väldigt lång.

Finns det något sett jag kan koden effektivare och förkorta den?
Tar gärna emot tips för lära mig java bättre. Så visa inte bara koden utan förklara förändringen gärna tack.

/* * DatabaseClass.java * */ /** * * @author Christoffer Börjessson */ package truefashion; import java.sql.*; import java.util.*; import java.awt.Image; public class DatabaseClass { private Connection con; public Statement stmt; private String[][] entries = new String[100][100]; private String [] columns; int id; int matchesToId; private static final String dbUrl = "jdbc:.."; private static final String User = "iuser"; private static final String Password = "pw"; private static final String DriverName = "com.mysql.jdbc.Driver"; /** * Constructor * @param columnNames */ public DatabaseClass(String [] c) { columns = c; loadDriver(); } /** * Constructor * */ public DatabaseClass() { loadDriver(); } /** * loadDriver * loads the JDBC driver in com folder */ public void loadDriver() { try { //1. Load the JDBC driver Class.forName(DriverName); } catch (ClassNotFoundException cnf) // cannot find driver { System.out.println (cnf.getMessage()); } catch (Exception e) { System.out.println(e.getMessage()); } } /** * connect * sets up a connection to the database and creates a statement */ public void connect() { try { // 2. Get a database connection con = DriverManager.getConnection(dbUrl, User, Password); // 3. Create statement stmt = con.createStatement(); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } } /** * closeConnection * Closes the connection */ public void closeConnection() { try //close stmt and connection { stmt.close(); con.close(); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } } public Statement getStatement() { return stmt; } // ResultSet rs = stmt.executeQuery(selectSQL); // kollektion, aktiv eller ej. private ArrayList getCollection(String collectionName) { connect(); ArrayList collection = new ArrayList(); try { String selectSQL = "SELECT*FROM Collection WHERE collectionName="+collectionName+";"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { collection.add(rs.getString("matchesToID")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return collection; } // Retunerar en samling med alla färgkoder public ArrayList getColorCodes() { connect(); ArrayList colorCodes = new ArrayList(); try { String selectSQL = "SELECT*FROM Colors"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { colorCodes.add(rs.getString("colorCode")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return colorCodes; } // Storlek och saldo på den storleken hämtas via id som stämmer överrens. private ArrayList getMatchingGarment(String id) { connect(); ArrayList matchingGarment = new ArrayList(); try { String selectSQL = "SELECT matchesToID FROM MatchingGarment WHERE id="+id+";"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { matchingGarment.add(rs.getString("matchesToID")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return matchingGarment; } // Storlek och saldo på den storleken hämtas via id som stämmer överrens. private ArrayList getStorage(String id) { connect(); ArrayList storage = new ArrayList(); try { String selectSQL = "SELECT size,quantity FROM Storage WHERE id="+id+";"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { Storage store = new Storage(rs.getString("size"),rs.getInt("quantity")); // skapa en ny class istället , gör classen också. storage.add(store); //storage.add(rs.getString("size")); //storage.add(rs.getString("quantity")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return storage; } // Hämtar färgerna till kläder med samma ID. private ArrayList getColorsInGarment(String id) { connect(); ArrayList colors = new ArrayList(); try { String selectSQL = "SELECT * FROM GarmentColor WHERE id="+id+";"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { colors.add(rs.getString("colorCode")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return colors; } /** * insertValue * @param v, the values to insert */ public ArrayList getGarment() { connect(); ArrayList garment = new ArrayList(); try { String selectSQL = "SELECT*FROM Garment"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { // null = Image image ( ej klar vid kodningen) Garment g = new Garment(rs.getString("style"),getColorsInGarment(rs.getString("id")), getStorage(rs.getString("id")), rs.getString("type"), rs.getString("artnr"), rs.getFloat("price"), rs.getString("collectionName"), rs.getString("gender"), rs.getString("category"), null, rs.getInt("id")); garment.add(g); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return garment; } // Lägger till kläder i Garment. public void setGarment(Garment garment) { connect(); try { String selectSQL = "INSERT INTO Garment(artNr,type,price,collectionName,gender,category,imageURL,style) VALUES ('"+garment.getArtNr()+"','"+garment.getType()+"',"+garment.getPrice()+",'"+garment.getCollectionName()+"','"+garment.getGender()+"','"+garment.getCategory()+"','"+garment.getImageUrl()+"','"+garment.getStyle()+"');"; stmt.executeUpdate(selectSQL); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } closeConnection(); } // Tar bort ett garment från databasen private void delGarment(Garment garment) { connect(); try { String selectSQL = "DELETE Garment WHERE id="+garment.getID()+");"; stmt.executeUpdate(selectSQL); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } closeConnection(); } // Sparar vilka överdelar som matchar till underdelar. Överdelarnas ID ska kontrolleras så dom sparas som ID // och underdelens ID ska sparas som matchesToId. public void setMatchesToId(Garment garment, Garment garment2) { connect(); try { // Kontrollerar om plagget är en överdel eller underdel if (garment.getType() == "upperBody") { id = garment.getID(); matchesToId = garment2.getID(); } else { matchesToId = garment.getID(); id = garment2.getID(); } String selectSQL = "INSERT INTO matchingGarment(id,matchingToId) VALUES ("+ id +","+ matchesToId +");"; stmt.executeUpdate(selectSQL); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } closeConnection(); } // Tar bort ett en matchning mellan 2 plagg, garment sorteras först så överdelens ID kollar i databasens ID. public void delMatchesToId (Garment garment, Garment garment2) { connect(); try { if (garment.getType() == "upperBody") { id = garment.getID(); matchesToId = garment2.getID(); } else { matchesToId = garment.getID(); id = garment2.getID(); } String selectSQL = "DELETE matchingGarment WHERE id="+ id +" AND matchesToID="+ matchesToId +";"; stmt.executeUpdate(selectSQL); } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); } closeConnection(); } /** * Retunerar en samling med färgkoder som stämmer överrens med skinID & hairID. * */ public ArrayList getLookMatchColors(String skinID, String hairID) { connect(); ArrayList lookMatchColors = new ArrayList(); try { String selectSQL = "SELECT colorCode FROM LookMatch WHERE skinID="+skinID+" AND hairID="+hairID+";"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { lookMatchColors.add(rs.getString("colorCode")); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return lookMatchColors; } /** * Retunerar en samling med LookMatch objekt där matchningskombinationer ligger i. * */ public ArrayList getLookMatch() { connect(); ArrayList lookMatch = new ArrayList(); try { String selectSQL = "SELECT DISTINCT skinID, hairID FROM LookMatch"; // 4. Execute query ResultSet rs = stmt.executeQuery(selectSQL); while (rs.next()) { LookMatch lm = new LookMatch (rs.getString("skinID"),getLookMatchColors(rs.getString("skinID"),rs.getString("hairID")), rs.getString("hairID")); lookMatch.add(lm); } } catch (SQLException sqe) { System.out.println (sqe.getMessage ()); System.out.println (sqe.getSQLState()); return null; } closeConnection(); return lookMatch; } }

Visa signatur

AMD Athlon 64 3400+ | Corsair Value S.512MB | EPoX EP-8KDA3+ | TAGAN 380W | Tt TSUNAMI SILVER |

Permalänk

orkar verkligen inte läsa hela koden här

Permalänk
Medlem

Ett generellt tips är att försöka hålla raderna lagom långa (dvs inte längre än ~80 tecken). Det blir jobbigt o läsa koden om man måste scrolla åt sidan..

Permalänk

Goggla efter lite artiklar som handlar om "refactoring". Ett par enkla knep som lätt kan tala om ifall källkoden behöver struktureras om (refactor):

(a) "Copy-paste" avsnitt där identisk kod upprepas.
(b) Medlemsfunktioner som gör mer än 1 sak.

Koncentera dig på dessa, splitta funktioner, skriv om, skriv nya så skall du se att koden blir riktigt estetiskt tilltalande. Glöm inte att detta är något som ALLA gör, oberoende av skicklighet.

Ingen skriver perfekt kod.

Lite exempel:

/** * Debugging utilities. */ private void dumpException(SQLException e) { System.out.println(e.getMessage()); } private void dumpSQLException(SQLException e) { System.out.println(e.getMessage()); System.out.println(e.getSQLState()); } /** * Database connection managment. */ private void loadDriver() { try { Class.forName(DriverName); } catch (ClassNotFoundException e) { dumpException(e); } } private void sqlConnect() { try { connection = DriverManager.getConnection(dbUrl, dbUser, dbPassword); statement = connection.createStatement(); } catch (SQLException e) { dumpSQLException(e); } } private void sqlDisconnect() { try { statement.close(); connection.close(); } catch (SQLException e) { dumpSQLException(e); } } /** * Database query utilities. */ private ResultSet sqlQuery(String select) { ResultSet rows; sqlConnect(); try { rows = statement.executeQuery(select); } catch (SQLException e) { dumpSQLException(e); } sqlDisconnect(); return rows; } private ArrayList extractColumns(ResultSet rows, String columnID) { ArrayList matches = new ArrayList(); while (rows.next()) { matches.add(rows.getString(columnID)); } return matches; } /** * Database query. */ private ArrayList getCollection(String collectionName) { ResultSet rows = sqlColumnQuery("SELECT*FROM Collection WHERE collectionName="+collectionName+";"); return extractColumns("matchesToID"); } public ArrayList getColorCodes() { ResultSet rows = sqlColumnQuery("SELECT*FROM Colors"); return extractColumns("colorCodes"); } private ArrayList getMatchingGarment(String id) { ResultSet rows = sqlColumnQuery("SELECT matchesToID FROM MatchingGarment WHERE id="+id+";"); return extractColumns("matchesToID"); }