He notado algo en mi código en varios proyectos que me parece un olor a código y algo malo que hacer, pero no puedo lidiar con eso.
Al intentar escribir "código limpio", tiendo a usar en exceso los métodos privados para que mi código sea más fácil de leer. El problema es que el código es realmente más limpio, pero también es más difícil de probar (sí, sé que puedo probar métodos privados ...) y, en general, me parece un mal hábito.
Aquí hay un ejemplo de una clase que lee algunos datos de un archivo .csv y devuelve un grupo de clientes (otro objeto con varios campos y 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 puede ver, la clase solo tiene un constructor que llama a algunos métodos privados para hacer el trabajo, sé que no es una buena práctica en general, pero prefiero encapsular toda la funcionalidad en la clase en lugar de hacer públicos los métodos, en cuyo caso un cliente debe trabajar de esta manera:
GroupOfCustomersImporter importer = new GroupOfCustomersImporter(filepath)
importer.createCSVReader();
read();
GroupOfCustomer group = constructGoupOfCustomerInstance();
Prefiero esto porque no quiero poner líneas de código inútiles en el código del lado del cliente molestando a la clase del cliente con detalles de implementación.
Entonces, ¿es realmente un mal hábito? En caso afirmativo, ¿cómo puedo evitarlo? Tenga en cuenta que lo anterior es solo un ejemplo simple. Imagina que ocurre la misma situación en algo un poco más complejo.
fuente