Percebi algo no meu código em vários projetos que me parece um cheiro de código e algo ruim para fazer, mas não consigo lidar com isso.
Ao tentar escrever "código limpo", costumo usar métodos privados em excesso para facilitar a leitura do código. O problema é que o código é realmente mais limpo, mas também é mais difícil de testar (sim, eu sei que posso testar métodos particulares ...) e, em geral, parece um mau hábito para mim.
Aqui está um exemplo de uma classe que lê alguns dados de um arquivo .csv e retorna um grupo de clientes (outro objeto com vários campos e atributos).
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;
}
}
Como você pode ver, a classe tem apenas um construtor que chama alguns métodos particulares para realizar o trabalho, sei que isso não é uma boa prática em geral, mas prefiro encapsular toda a funcionalidade da classe em vez de tornar os métodos públicos. um cliente deve trabalhar desta maneira:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
Prefiro isso porque não quero colocar linhas de código inúteis no código do lado do cliente, incomodando a classe cliente com detalhes de implementação.
Então, isso é realmente um mau hábito? Se sim, como posso evitá-lo? Observe que o acima é apenas um exemplo simples. Imagine a mesma situação acontecendo em algo um pouco mais complexo.