Я помітив щось у своєму коді в різних проектах, що здається мені кодовим запахом і чимось поганим, але я не можу з цим впоратися.
Намагаючись написати "чистий код", я схильний надмірно використовувати приватні методи, щоб полегшити читання коду. Проблема полягає в тому, що код справді чистіший, але його також важче перевірити (так, я знаю, що я можу перевірити приватні методи ...), і взагалі це здається мені поганою звичкою.
Ось приклад класу, який читає деякі дані з .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();
Я вважаю за краще це, тому що я не хочу вводити марні рядки коду в бічний код клієнта, що турбує клас клієнта з деталями реалізації.
Отже, це насправді шкідлива звичка? Якщо так, то як я можу цього уникнути? Зауважте, що вищезазначене - лише простий приклад. Уявіть, що та ж ситуація відбувається в чомусь трохи складнішому.