중복제거를 위해 복잡도가 증가하는 경우

2015-03-27 00:54

현재 진행 중인 프로젝트에서 DAO클래스에 대한 중복제거가 이슈입니다. 그런데 쿼리를 처리하는 부분도 메소드로 빼내려다 보니 리턴을 받는 함수에서 이슈가 생겼습니다ㅡ ResultSet을 리턴하지 못하기 때문에 이 부분을 처음에는 List<Map<String, Object>>로 반환하다가 가독성과 자료의 복잡도가 생겨서 JSON으로 변환해서 전하는 방식으로 수정했습니다. 하지만 이 부분도 영 시원치 않네요. 개인적으로는 중복을 제거 하기 위해 억지로 리턴형을 맞춘 느낌이라.. 현재는 Generic한 Object로 전달할 방법이 없나 고민중입니다. 그런데 여기서 물어보고 싶은 점이. 굳이 중복 제거를 위해 메소드룰 저렇게 복잡한 방식으로 빼낼 필요가 있을까 입니다. 개인적 생각으로는 connection이 비용이 크기 때문에 이 부분만 처리해주면 어느 정도 중복이 있지만 쿼리 로직은 각 클래스의 DAO에서 처리해줘도 충분하다는 생각입니다. 다양한 조언을 듣고 싶습니다~

	public String queryForReturn(String sql, String... parameters)
			throws SQLException, ClassNotFoundException {
		Connection conn = getConnection();
		PreparedStatement pstmt = setPreparedStatement(conn, sql, parameters);
		ResultSet rs = pstmt.executeQuery();
		JsonArray array = getResultMapRows(rs);
		terminateResources(conn, pstmt, rs);
		return array.toString();
	}


	private PreparedStatement setPreparedStatement(Connection conn, String sql,
			String... parameters) throws SQLException, ClassNotFoundException {
		int index = 1;
		PreparedStatement pstmt = conn.prepareStatement(sql);


		for (String parms : parameters)
			pstmt.setString(index++, parms);


		return pstmt;
	}


	private JsonArray getResultMapRows(ResultSet rs) throws SQLException {
		ResultSetMetaData metaData = rs.getMetaData();
		int sizeOfColumn = metaData.getColumnCount();


		String column = null;
		JsonArray array = new JsonArray();
		JsonObject obj = null;


		while (rs.next()) {
			obj = new JsonObject();
			for (int indexOfcolumn = 0; indexOfcolumn < sizeOfColumn; indexOfcolumn++) {
				column = metaData.getColumnName(indexOfcolumn + 1);
				obj.addProperty(column, rs.getString(column));
			}
			array.add(obj);
		}
		return array;
	}

0개의 의견 from SLiPP

의견 추가하기

연관태그

← 목록으로