Attualmente sono responsabile della progettazione dell'API di un nuovo servizio. È iniziato abbastanza semplice, sono stati consentiti 10 diversi URI o così. Sapevo che non stavo facendo il miglior codice, ma sinceramente non vedevo un modo migliore, dato che mi manca esperienza, e dal momento che stiamo usando AWS e API Gateway, ho pensato di avere meno oggetti come raccomandato potrebbe essere una sorta di "difesa" "per l'utilizzo di meno classi.
Il metodo che prende un URI, lo scompone, crea una query SQL e restituisce le righe come PreparedStatement, usate per contenere 200 righe di codice. Era già grande.
Ora ho molte più chiamate, più casi, vogliono più del doppio dei casi originali pensati. Nello stesso intervallo di tempo, ma ... Il metodo supererà 500 righe di codice, e se questa percentuale di modifiche impegnative continua, temo che non sarà così facile da mantenere come in origine.
Il punto è, senza usare qualcosa come Spring o Hibernate con annotazioni, non so come posso rendere il codice più orientato agli oggetti e correttamente refactoring.
Esempio di codice:
if(pathParameters.containsValue("profile")) {
if(numPaths == 2 && numFilters == 0) {//http:API/profile/id
preparedstatement = con.prepareStatement("SELECT id_profile, nombre_profile "
+ " from profile WHERE id_profile = ?;");
preparedstatement.setString(1, pathParameters.get("nivelPath1"));
}
else if(numPaths == 1) {
//[... More code....]
if(pathParameters.containsValue("skill")) {
if(pathParameters.size() == 2 && numFilters == 0) {//http:API/skill/id
preparedstatement = con.prepareStatement("SELECT id_skill, nombre_skill FROM skill WHERE id_skill = ?;");
preparedstatement.setString(1, pathParameters.get("nivelPath1"));
}
else if (numPaths == 1) {
if(queryParameters == null || queryParameters.isEmpty()) {//http:API/skill
preparedstatement = con.prepareStatement("SELECT oferta_skill_perfil.id_skill " +
"FROM oferta_skill_perfil " +
"INNER JOIN skill " +
"ON skill.id_skill=oferta_skill_perfil.id_skill " +
"GROUP BY oferta_skill_perfil.id_skill " +
"ORDER BY COUNT(oferta_skill_perfil.id_skill) DESC " +
"LIMIT 10 ;");
}
//[... More code....]
//[... More code....]
//[... More code....]
Quindi in pratica il metodo è troppo grande ma allo stesso tempo non riesco a capire come dovrei scomporlo. È un metodo che prende un URI, lo scompone e costruisce una query, quindi anche se lo divido in metodi più piccoli, non riesco a vedere come refactor in modo che la logica si applichi più spesso e posso ridurre il numero totale di righe .