Mi preocupación en el siguiente código es que el parámetro para el constructor no se correlaciona directamente con los campos de instancia de la clase. Los campos de instancia derivan valor del parámetro y para el cual estoy usando el método initalize. Además, hago algunas cosas para que el objeto creado se pueda usar directamente en el código que sigue, p. llamando a drawBoundaries(). Siento que está haciendo lo que se entiende por crear (inicializar) un Lienzo en un sentido abstracto.¿Es una violación de Clean Code llamar al método init en un constructor como este?
¿Mi constructor está haciendo demasiado? Si agrego métodos para llamar las cosas en el constructor explícitamente desde afuera, eso será incorrecto. Por favor, hágame saber sus puntos de vista.
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
public Canvas(ParsedCells seedPatternCells) {
initalizeCanvas(seedPatternCells);
}
private void initalizeCanvas(ParsedCells seedPatternCells) {
setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
drawBoundaries();
placeSeedPatternCellsOnCanvas(seedPatternCells);
}
...
P.S .: Lo siento si esto parece una pregunta tonta; mi código va a ser revisado por un gurú de la programación orientada a objetos y estoy preocupada: -0
EDIT:
leí algunas preocupaciones acerca de los métodos de initalizeCanvas() ser invalidados - afortunadamente estos métodos son privado y no llame a ningún otro método.
De todos modos, después de seguir investigando en la red, he empezado a gustarme más ... ¡¡Espero que estén de acuerdo !! ??
public class Canvas {
private int numberOfRows;
private int numberOfColumns;
private final List<Cell> listOfCells = new LinkedList<Cell>();
private Canvas() {
}
public static Canvas newInstance(ParsedCells seedPatternCells) {
Canvas canvas = new Canvas();
canvas.setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells);
canvas.drawBoundaries();
canvas.placeSeedPatternCellsOnCanvas(seedPatternCells);
return canvas;
}
No veo nada discutible con su código. –