Я заметил кое-что в своем коде в различных проектах, которое кажется мне запахом кода и чем-то плохим, но я не могу с этим справиться.
Пытаясь написать «чистый код», я склонен чрезмерно использовать частные методы, чтобы облегчить чтение моего кода. Проблема в том, что код действительно чище, но его также сложнее тестировать (да, я знаю, что могу тестировать частные методы ...), и в целом это кажется мне плохой привычкой.
Вот пример класса, который считывает некоторые данные из файла .csv и возвращает группу клиентов (другой объект с различными полями и атрибутами).
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;
}
}
Как вы можете видеть, у класса есть только конструктор, который вызывает некоторые частные методы для выполнения работы, я знаю, что это не очень хорошая практика в целом, но я предпочитаю инкапсулировать все функциональные возможности в классе вместо того, чтобы делать методы общедоступными в этом случае. клиент должен работать так:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
Я предпочитаю это, потому что я не хочу помещать бесполезные строки кода в коде на стороне клиента, беспокоя клиентский класс деталями реализации.
Итак, это на самом деле вредная привычка? Если да, как я могу избежать этого? Обратите внимание, что приведенное выше является просто примером. Представьте, что та же самая ситуация происходит в чем-то более сложном.