Saya telah memperhatikan sesuatu dalam kode saya di berbagai proyek yang sepertinya bau kode bagi saya dan sesuatu yang buruk untuk dilakukan, tetapi saya tidak bisa menghadapinya.
Saat mencoba menulis "kode bersih" Saya cenderung menggunakan metode pribadi untuk membuat kode saya lebih mudah dibaca. Masalahnya adalah bahwa kode tersebut memang lebih bersih tetapi juga lebih sulit untuk diuji (ya saya tahu saya bisa menguji metode pribadi ...) dan secara umum sepertinya kebiasaan buruk bagi saya.
Berikut adalah contoh kelas yang membaca beberapa data dari file .csv dan mengembalikan sekelompok pelanggan (objek lain dengan berbagai bidang dan atribut).
public class GroupOfCustomersImporter {
//... Call fields ....
public GroupOfCustomersImporter(String filePath) {
this.filePath = filePath;
customers = new HashSet<Customer>();
createCSVReader();
read();
constructTTRP_Instance();
}
private void createCSVReader() {
//....
}
private void read() {
//.... Reades the file and initializes the class attributes
}
private void readFirstLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readSecondLine(String[] inputLine) {
//.... Method used by the read() method
}
private void readCustomerLine(String[] inputLine) {
//.... Method used by the read() method
}
private void constructGroupOfCustomers() {
//this.groupOfCustomers = new GroupOfCustomers(**attributes of the class**);
}
public GroupOfCustomers getConstructedGroupOfCustomers() {
return this.GroupOfCustomers;
}
}
Seperti yang Anda lihat kelas hanya memiliki konstruktor yang memanggil beberapa metode pribadi untuk menyelesaikan pekerjaan, saya tahu itu bukan praktik yang baik secara umum, tetapi saya lebih memilih untuk merangkum semua fungsionalitas di kelas daripada membuat metode publik dalam hal ini klien harus bekerja dengan cara ini:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
Saya lebih suka ini karena saya tidak ingin meletakkan baris kode yang tidak berguna dalam kode sisi klien yang mengganggu kelas klien dengan detail implementasi.
Jadi, apakah ini sebenarnya kebiasaan buruk? Jika ya, bagaimana saya bisa menghindarinya? Harap dicatat bahwa contoh di atas hanyalah contoh sederhana. Bayangkan situasi yang sama terjadi pada sesuatu yang sedikit lebih kompleks.