Zauważyłem coś w moim kodzie w różnych projektach, które wydaje mi się, że kod pachnie i coś złego do zrobienia, ale nie mogę sobie z tym poradzić.
Próbując pisać „czysty kod”, często nadużywam prywatnych metod, aby mój kod był łatwiejszy do odczytania. Problem polega na tym, że kod jest rzeczywiście czystszy, ale trudniej go przetestować (tak, wiem, że mogę przetestować metody prywatne ...) i ogólnie wydaje mi się to złym nawykiem.
Oto przykład klasy, która odczytuje niektóre dane z pliku .csv i zwraca grupę klientów (inny obiekt z różnymi polami i atrybutami).
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;
}
}
Jak widać, klasa ma tylko konstruktor, który wywołuje niektóre prywatne metody wykonania zadania, wiem, że nie jest to ogólnie dobra praktyka, ale wolę obudować całą funkcjonalność w klasie, zamiast upubliczniać metody. klient powinien działać w ten sposób:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
Wolę to, ponieważ nie chcę umieszczać niepotrzebnych wierszy kodu w kodzie bocznym klienta, przeszkadzając klasie klienta szczegółami implementacji.
Czy to rzeczywiście zły nawyk? Jeśli tak, jak mogę tego uniknąć? Pamiętaj, że powyższy jest tylko prostym przykładem. Wyobraź sobie, że ta sama sytuacja dzieje się w czymś nieco bardziej złożonym.