Bukan anti-pola per se, tetapi pola kode yang memberi tahu Anda perlu melakukan refactor.
Dan itu sangat mudah, Anda hanya perlu tahu aturan praktis yang menulis tidak lebih dari blok percobaan dalam metode yang sama. Jika Anda tahu benar untuk menulis kode terkait bersama-sama, biasanya hanya menyalin dan menempel setiap blok coba dengan blok tangkap dan menempelkannya di dalam metode baru, lalu ganti blok asli dengan panggilan ke metode ini.
Aturan praktis ini didasarkan pada saran Robert C. Martin dari bukunya 'Kode Bersih':
jika kata kunci 'coba' ada dalam suatu fungsi, itu harus menjadi kata pertama dalam fungsi dan bahwa seharusnya tidak ada apa-apa setelah tangkapan / akhirnya blok.
Contoh singkat tentang "pseudo-java". Misalkan kita memiliki sesuatu seperti ini:
try {
FileInputStream is = new FileInputStream(PATH_ONE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_TWO);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
try {
FileInputStream is = new FileInputStream(PATH_THREE);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
}
Lalu kita bisa refactor setiap try catch dan dalam hal ini setiap try-catch block mencoba hal yang sama tetapi di lokasi yang berbeda (betapa mudahnya: D), kita hanya perlu menyalin paste salah satu blok try-catch dan membuat metode untuk itu. .
public String loadConfigFile(String path) {
try {
FileInputStream is = new FileInputStream(path);
String configData = InputStreamUtils.readString(is);
return configData;
} catch (FileNotFoundException e) {
return null;
}
}
Sekarang kami menggunakan ini dengan tujuan yang sama seperti sebelumnya.
String[] paths = new String[] {PATH_ONE, PATH_TWO, PATH_THREE};
String configData;
for(String path : paths) {
configData = loadConfigFile(path);
if (configData != null) {
break;
}
}
Saya harap itu membantu :)